/*
*
* SPDX-License-Identifier: GPL-2.0
*
* Copyright (C) 2011-2018 ARM or its affiliates
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2.
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/

#include "acamera_command_api.h"
//#include "acamera_firmware_api.h"
#include "acamera_firmware_settings.h"
// created from 2016-10-19T16:42:58.865Z UTClinear.json

// CALIBRATION_LIGHT_SRC
static uint16_t _calibration_light_src[][2] = {
  { 272,191 }};

// CALIBRATION_RG_POS
static uint16_t _calibration_rg_pos[] = {159,174,193,211,230,256,267,285,304,322,341,359,378,396,434};

// CALIBRATION_BG_POS
static uint16_t _calibration_bg_pos[] = {131,151,165,178,192,205,219,233,246,256,274,287,301,314,342};

// CALIBRATION_MESH_RGBG_WEIGHT
static uint16_t _calibration_mesh_rgbg_weight[][15] = {
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 16, 256, 215 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12, 61, 256, 256, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 2, 17, 87, 256, 256, 115, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 5, 30, 116, 256, 256, 134, 14, 0 },
  { 0, 0, 0, 0, 0, 1, 7, 48, 144, 256, 256, 146, 24, 1, 0 },
  { 0, 0, 0, 0, 0, 21, 65, 256, 256, 256, 131, 23, 1, 0, 0 },
  { 0, 0, 0, 0, 9, 149, 256, 256, 256, 125, 19, 1, 0, 0, 0 },
  { 0, 0, 0, 6, 78, 256, 256, 256, 135, 21, 1, 0, 0, 0, 0 },
  { 0, 0, 2, 41, 248, 256, 256, 199, 35, 3, 0, 0, 0, 0, 0 },
  { 0, 1, 56, 256, 256, 226, 116, 17, 1, 0, 0, 0, 0, 0, 0 },
  { 0, 5, 256, 256, 247, 36, 12, 1, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 27, 256, 220, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 256, 256, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 8, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }};

// CALIBRATION_MESH_LS_WEIGHT
static uint16_t _calibration_mesh_ls_weight[][15] = {
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 3, 4, 25, 42, 53, 57, 53, 42, 25, 4, 3, 0, 0 },
  { 0, 0, 4, 131, 157, 179, 193, 198, 193, 179, 157, 131, 4, 0, 0 },
  { 0, 0, 25, 157, 188, 214, 232, 238, 232, 214, 188, 157, 25, 0, 0 },
  { 0, 0, 42, 179, 214, 243, 255, 256, 255, 243, 214, 179, 42, 0, 0 },
  { 0, 0, 53, 193, 232, 255, 256, 256, 256, 255, 232, 193, 53, 0, 0 },
  { 0, 0, 57, 198, 238, 256, 256, 256, 256, 256, 238, 198, 57, 0, 0 },
  { 0, 0, 53, 193, 232, 255, 256, 256, 256, 255, 232, 193, 53, 0, 0 },
  { 0, 0, 42, 179, 214, 243, 255, 256, 255, 243, 214, 179, 42, 0, 0 },
  { 0, 0, 25, 157, 188, 214, 232, 238, 232, 214, 188, 157, 25, 0, 0 },
  { 0, 0, 4, 131, 157, 179, 193, 198, 193, 179, 157, 131, 4, 0, 0 },
  { 0, 0, 3, 4, 25, 42, 53, 57, 53, 42, 25, 4, 3, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }};

// CALIBRATION_MESH_COLOR_TEMPERATURE
static uint16_t _calibration_mesh_color_temperature[][15] = {
  { 184, 196, 215, 229, 245, 268, 277, 292, 308, 323, 340, 355, 369, 382, 385 },
  { 174, 186, 204, 219, 234, 253, 267, 281, 297, 312, 328, 344, 360, 372, 385 },
  { 167, 179, 194, 211, 227, 248, 255, 274, 289, 304, 320, 335, 352, 365, 385 },
  { 161, 173, 188, 204, 220, 241, 250, 267, 282, 297, 313, 328, 344, 359, 385 },
  { 154, 166, 181, 195, 212, 234, 243, 257, 275, 290, 305, 320, 336, 351, 385 },
  { 154, 160, 175, 189, 205, 227, 236, 250, 268, 283, 298, 313, 329, 344, 372 },
  { 154, 154, 168, 182, 197, 219, 228, 243, 259, 275, 291, 305, 321, 335, 365 },
  { 147, 154, 161, 175, 190, 212, 221, 235, 251, 267, 283, 298, 313, 328, 358 },
  { 139, 149, 155, 169, 184, 205, 214, 228, 244, 261, 276, 291, 306, 321, 352 },
  { 133, 143, 154, 164, 179, 200, 208, 223, 239, 255, 270, 285, 301, 316, 346 },
  { 127, 133, 144, 155, 170, 191, 199, 214, 229, 244, 263, 275, 291, 306, 336 },
  { 118, 126, 136, 148, 164, 184, 193, 207, 222, 237, 256, 268, 284, 299, 330 },
  { 109, 117, 127, 139, 157, 177, 186, 200, 215, 229, 245, 263, 276, 291, 323 },
  { 100, 108, 118, 128, 144, 171, 180, 194, 208, 223, 238, 258, 269, 284, 315 },
  { 100, 100, 100, 109, 119, 144, 166, 180, 195, 208, 223, 238, 260, 269, 300 }};

// RG, BG, MULT. final wb gain adjuster for a sky scene. devided by CALIBRATION_WB_STRENGTH_MULT in use
static uint16_t _calibration_wb_strength[] = {1000, 1000, 1000};

// lux threshold for sky
static uint16_t _calibration_sky_lux_th[] = {10000};

// 1D rg/bg readout from color_temp
static uint16_t _calibration_ct_rg_pos_calc[] = {174,198,214,256,299,309,369,388,414};

// 1D rg/bg readout from color_temp
static uint16_t _calibration_ct_bg_pos_calc[] = {327,298,283,256,228,222,183,170,152};

// CALIBRATION_COLOR_TEMP
static uint16_t _calibration_color_temp[] = {100,133,154,200,250,263,333,357,385};

// CALIBRATION_CT65POS
static uint16_t _calibration_ct65pos[] = {2};

// CALIBRATION_CT40POS
static uint16_t _calibration_ct40pos[] = {8};

// CALIBRATION_CT30POS
static uint16_t _calibration_ct30pos[] = {6};

// CALIBRATION_EVTOLUX_EV_LUT
static uint32_t _calibration_evtolux_ev_lut[] = {2431793,2577131,2985894,3199427,3357300,3452023,3642063,3739642,3867054,3933616,4053285,4140767,4224722,4402411,4700233,4749144};

// CALIBRATION_EVTOLUX_LUX_LUT
static uint32_t _calibration_evtolux_lux_lut[] = {6000,4000,2000,1000,800,600,500,400,300,250,200,150,100,50,20,10};

// CALIBRATION_BLACK_LEVEL_R
static uint16_t _calibration_black_level_r[][2] = {
  { 0, 253 },
  { 32, 253 },
  { 64, 253 },
  { 96, 253 },
  { 128, 253 }};

// CALIBRATION_BLACK_LEVEL_GR
static uint16_t _calibration_black_level_gr[][2] = {
  { 0, 250 },
  { 32, 250 },
  { 64, 250 },
  { 96, 250 },
  { 128, 250 }};

// CALIBRATION_BLACK_LEVEL_GB
static uint16_t _calibration_black_level_gb[][2] = {
  { 0, 250 },
  { 32, 250 },
  { 64, 250 },
  { 96, 250 },
  { 128, 250 }};

// CALIBRATION_BLACK_LEVEL_B
static uint16_t _calibration_black_level_b[][2] = {
  { 0, 253 },
  { 32, 253 },
  { 64, 253 },
  { 96, 253 },
  { 128, 253 }};

// CALIBRATION_STATIC_WB
static uint16_t _calibration_static_wb[] = {446,256,256,421};

// RR RG RB GR GG GB BR BG BB
static uint16_t _calibration_mt_absolute_ls_a_ccm[] = {362,32837,32805,32859,403,32824,2,33012,498};

// RR RG RB GR GG GB BR BG BB
static uint16_t _calibration_mt_absolute_ls_d40_ccm[] = {362,32849,32793,32841,396,32835,9,32962,441};

// RR RG RB GR GG GB BR BG BB
static uint16_t _calibration_mt_absolute_ls_d50_ccm[] = {368,32862,32786,32831,392,32841,9,32949,428};

// CALIBRATION_SHADING_LS_A_R
static uint8_t _calibration_shading_ls_a_r[] = {171,156,144,136,129,123,119,114,108,103,99,95,91,88,86,85,85,86,87,90,94,98,103,108,112,116,120,126,131,139,152,169,161,149,138,131,124,118,112,107,101,95,90,86,82,79,77,76,76,77,78,81,85,89,95,100,105,110,115,121,127,133,146,158,151,141,133,126,119,113,107,101,94,88,82,78,74,71,70,69,69,70,71,74,78,82,88,93,99,105,111,116,123,129,137,146,145,136,128,121,115,109,102,95,88,81,75,71,67,65,63,62,62,63,64,67,71,75,81,87,94,100,106,112,118,125,132,140,140,132,125,118,111,105,97,89,81,74,69,64,61,59,57,56,56,57,58,61,64,69,74,81,88,95,102,108,115,121,128,136,137,128,121,114,107,100,91,83,75,68,63,59,55,53,52,51,51,52,53,55,59,63,68,75,82,90,98,105,111,118,125,133,133,125,118,111,104,95,86,77,70,63,58,54,51,49,47,47,47,47,49,51,54,58,63,70,77,85,94,101,108,114,122,130,131,122,115,108,100,90,81,72,65,59,54,50,47,45,44,43,43,44,45,47,50,54,59,65,72,80,89,98,105,111,119,127,128,120,113,105,96,86,77,68,61,55,50,47,44,42,41,40,40,41,42,44,47,50,55,61,68,76,85,94,102,109,116,125,126,118,110,102,92,83,73,65,57,52,47,44,41,40,39,38,38,39,40,41,44,47,52,57,64,73,82,91,100,107,114,123,125,116,108,100,90,79,70,61,55,49,45,42,39,38,37,36,36,37,38,39,42,45,49,55,62,70,79,88,97,105,113,121,123,114,107,97,87,77,67,59,52,47,43,40,38,36,35,35,35,35,36,38,40,43,47,53,59,67,76,86,95,103,111,119,123,113,105,96,85,74,65,57,51,45,42,39,37,35,34,34,34,34,35,37,39,42,45,51,57,65,74,84,93,102,109,118,122,113,104,94,83,73,64,56,49,44,40,38,36,34,33,33,33,33,34,36,38,40,44,49,56,63,72,82,92,100,108,117,122,112,103,93,82,72,63,55,48,44,40,37,35,33,33,32,32,33,33,35,37,40,43,48,55,62,71,81,91,100,107,116,122,111,103,93,82,71,62,54,48,43,40,37,35,33,32,32,32,32,33,35,37,40,43,48,54,62,70,80,90,99,107,116,121,111,103,93,82,71,62,54,48,43,39,37,35,33,32,32,32,32,33,35,37,39,43,48,54,62,70,80,90,99,107,115,121,112,103,93,82,72,63,55,49,44,40,37,35,34,33,32,32,33,34,35,37,40,44,48,55,62,71,81,91,100,107,116,122,112,104,94,83,73,64,56,49,44,41,38,35,34,33,33,33,33,34,36,38,40,44,49,55,63,72,82,92,100,108,117,123,113,105,96,85,74,65,57,51,46,42,39,36,35,34,33,33,34,35,36,38,41,45,50,57,65,74,83,93,101,109,117,124,114,106,97,87,76,67,59,52,47,43,40,37,36,35,34,34,35,36,37,40,43,47,52,59,66,75,85,94,102,110,118,124,116,108,99,89,79,70,61,54,49,45,41,39,37,36,36,36,36,37,39,41,44,48,54,61,69,78,87,96,104,111,119,126,118,110,102,92,82,73,64,57,52,47,44,41,39,38,37,37,38,39,41,43,47,51,57,64,72,81,90,98,106,113,121,129,120,113,105,96,86,77,68,61,55,50,46,43,41,40,40,40,40,41,43,46,49,54,60,67,75,84,93,101,108,115,123,131,122,115,108,100,90,81,72,65,59,53,50,47,44,43,42,42,43,44,46,49,53,58,64,71,79,88,96,104,110,117,125,133,125,118,111,103,95,86,77,69,63,58,54,50,48,47,46,46,46,48,50,53,57,62,68,76,84,92,100,106,113,120,128,136,128,121,114,107,100,91,82,75,68,63,58,55,52,51,50,50,51,52,54,58,62,67,73,81,88,96,103,109,116,123,131,139,131,124,117,111,104,96,88,81,74,68,64,60,57,56,55,55,55,57,60,63,67,73,79,86,93,100,106,113,120,126,134,142,134,128,121,115,108,102,94,87,81,75,70,66,63,62,61,61,61,63,66,69,74,79,85,92,98,104,110,117,123,130,138,146,138,131,125,118,112,106,100,94,87,82,77,73,70,68,67,67,68,70,72,76,80,85,91,97,103,108,114,120,127,135,144,153,145,136,130,124,117,112,107,100,95,89,85,81,78,76,75,75,76,77,80,83,88,92,98,103,108,113,119,125,132,144,155,161,151,142,135,129,123,119,114,109,104,99,94,90,87,85,84,84,84,86,89,92,96,101,106,110,114,119,125,131,138,151,168};

// CALIBRATION_SHADING_LS_A_G
static uint8_t _calibration_shading_ls_a_g[] = {136,125,115,109,103,98,95,91,88,85,82,79,76,74,73,73,73,73,75,76,79,82,85,88,91,94,98,102,107,114,125,139,128,119,110,104,99,94,90,86,83,79,75,72,70,68,67,66,66,67,68,70,73,76,79,83,86,90,94,98,103,109,119,129,121,113,106,100,95,91,87,82,78,74,70,67,64,62,61,60,60,61,62,64,67,70,74,78,82,86,90,94,99,105,112,119,117,109,103,97,92,88,83,78,73,69,65,62,59,57,56,55,55,56,57,59,62,65,69,74,78,83,87,91,96,102,107,115,113,106,100,94,89,85,79,74,69,64,60,57,54,53,51,51,51,52,53,55,57,61,65,69,74,79,84,88,93,99,104,111,110,103,97,92,87,82,76,70,64,60,56,53,50,49,48,47,47,48,49,51,53,56,60,65,70,76,81,86,90,96,102,109,108,101,95,90,84,78,72,66,61,56,52,49,47,45,44,44,44,44,45,47,50,53,57,61,66,72,78,83,88,93,99,106,106,99,93,88,82,75,69,63,57,53,49,46,44,42,42,41,41,42,43,44,47,49,53,58,63,69,75,81,86,91,97,104,104,97,91,86,79,72,66,60,54,50,46,44,42,40,39,39,39,39,40,42,44,47,50,55,60,66,72,79,84,90,95,102,102,96,90,84,77,70,63,57,52,48,44,41,40,38,37,37,37,37,38,40,42,45,48,52,57,63,70,76,83,88,94,100,101,95,89,82,75,68,61,55,50,46,42,40,38,37,36,36,36,36,37,38,40,43,46,50,55,61,68,74,81,87,92,99,100,93,87,81,73,66,59,53,48,44,41,38,37,35,35,34,34,35,36,37,39,41,44,48,53,59,66,73,79,85,91,97,100,93,86,80,72,64,57,52,47,43,40,37,36,34,34,33,33,34,35,36,38,40,43,47,52,57,64,71,78,84,89,96,99,92,86,79,71,63,56,51,46,42,39,37,35,34,33,33,33,33,34,35,37,39,42,46,50,56,63,70,77,83,89,95,99,91,85,78,70,62,56,50,45,41,38,36,35,33,33,32,32,33,33,35,36,38,41,45,50,55,62,69,76,83,88,94,98,91,85,78,70,62,55,49,45,41,38,36,34,33,32,32,32,32,33,34,36,38,41,45,49,55,62,69,76,82,88,94,99,91,85,78,70,62,55,50,45,41,38,36,34,33,32,32,32,32,33,34,36,38,41,45,49,55,61,69,76,82,88,94,99,91,85,78,70,62,56,50,45,41,38,36,34,33,33,32,32,33,33,35,36,38,41,45,50,55,62,69,76,82,88,94,99,92,86,79,71,63,56,51,46,42,39,37,35,34,33,33,33,33,34,35,37,39,42,45,50,56,62,69,76,83,88,94,100,93,87,80,72,64,57,52,47,43,40,37,36,34,34,33,33,34,34,36,37,40,43,46,51,57,63,70,77,83,89,95,100,93,87,81,73,66,59,53,48,44,41,38,36,35,34,34,34,34,35,37,38,41,44,48,53,58,65,72,78,84,90,96,101,94,89,82,75,68,61,55,50,46,42,40,38,36,35,35,35,36,36,38,40,42,45,49,54,60,66,73,79,85,90,97,103,96,90,84,77,70,63,57,52,48,44,41,39,38,37,36,36,37,38,39,41,44,47,51,56,62,68,75,81,86,92,98,104,97,91,86,80,72,66,60,54,50,46,43,41,40,39,38,38,39,39,41,43,46,49,54,59,64,71,77,82,88,93,100,106,99,93,88,82,75,69,63,57,53,49,46,44,42,41,40,40,41,42,43,46,48,52,56,62,67,73,79,84,89,95,102,108,101,95,90,84,78,72,66,61,56,52,49,47,45,44,43,43,43,44,46,48,51,55,60,65,70,76,81,86,91,97,104,110,103,97,92,87,81,76,70,64,60,56,53,50,48,47,46,46,47,48,49,52,55,59,63,68,73,78,83,88,94,99,106,112,106,100,94,89,84,79,74,69,64,60,57,54,52,51,50,50,50,51,53,56,59,63,67,72,76,81,86,90,96,102,109,115,108,103,97,92,87,83,78,73,68,64,61,58,56,55,54,54,55,56,58,60,63,67,71,75,80,84,88,93,99,105,112,118,111,105,100,95,90,86,82,77,73,69,66,63,61,60,59,59,59,61,62,65,68,71,75,79,83,87,91,97,102,109,117,124,117,109,104,99,94,90,86,82,78,75,71,69,67,65,64,64,65,66,68,70,73,76,80,83,86,90,95,100,106,117,126,132,122,114,108,103,98,94,91,88,84,81,78,75,73,72,71,71,71,72,74,76,79,82,85,87,90,94,99,104,111,122,136};

// CALIBRATION_SHADING_LS_A_B
static uint8_t _calibration_shading_ls_a_b[] = {138,126,116,109,103,98,94,91,88,85,81,78,76,74,73,72,72,73,75,77,80,83,86,89,92,95,99,104,109,115,126,139,130,121,112,105,100,94,90,86,83,79,75,72,70,68,67,66,66,67,69,71,73,77,80,84,87,91,95,100,105,111,121,130,123,115,108,102,96,92,87,83,78,74,70,67,64,63,61,61,61,62,63,65,68,72,75,79,84,88,92,96,102,107,114,121,118,110,104,99,94,89,84,79,74,69,65,62,59,57,56,56,56,57,58,60,63,66,70,75,79,84,89,93,98,103,109,116,114,107,101,95,91,85,80,74,69,64,60,57,55,53,52,51,51,52,53,55,58,61,65,70,75,80,85,90,95,100,106,112,111,104,98,93,88,82,76,70,65,60,56,53,51,49,48,47,47,48,49,51,54,57,61,66,71,77,82,87,92,97,103,109,109,102,96,91,85,79,73,66,61,57,53,50,47,46,45,44,44,45,46,48,50,53,58,62,68,73,79,85,89,95,100,107,107,100,94,88,82,76,69,63,58,53,49,46,44,43,42,41,41,42,43,45,47,50,54,59,64,70,76,82,87,92,98,104,105,98,92,86,80,73,66,60,55,50,47,44,42,40,40,39,39,40,41,42,45,47,51,56,61,67,73,80,85,91,96,102,103,96,90,85,78,70,63,57,52,48,44,42,40,38,38,37,37,38,39,40,42,45,49,53,58,64,71,77,83,89,94,100,102,95,89,83,75,68,61,55,50,46,42,40,38,37,36,36,36,36,37,39,41,43,47,51,56,62,68,75,82,87,92,98,101,94,88,81,74,66,59,53,48,44,41,39,37,36,35,34,35,35,36,37,39,42,45,49,54,60,66,73,80,86,91,97,100,93,87,80,72,65,58,52,47,43,40,38,36,35,34,33,34,34,35,36,38,40,43,47,52,58,65,72,79,85,90,95,100,93,86,79,71,64,57,51,46,42,39,37,35,34,33,33,33,33,34,35,37,39,42,46,51,57,64,71,78,84,89,95,100,92,86,79,70,63,56,50,45,42,39,36,35,33,33,32,32,33,34,35,37,39,42,46,50,56,63,70,77,83,89,94,99,92,86,78,70,62,56,50,45,41,38,36,34,33,32,32,32,33,33,35,36,39,41,45,50,56,62,70,77,83,88,94,99,92,86,78,70,63,56,50,45,41,38,36,34,33,32,32,32,32,33,35,36,38,41,45,50,56,62,69,77,83,88,94,99,92,86,79,71,63,56,50,45,42,39,36,35,33,33,32,32,33,33,35,36,39,42,45,50,56,62,69,77,83,88,94,99,93,87,79,71,64,57,51,46,42,39,37,35,34,33,33,33,33,34,35,37,39,42,46,51,57,63,70,77,83,88,94,100,94,88,81,73,65,58,52,47,43,40,38,36,34,34,33,33,34,34,36,38,40,43,47,52,58,64,71,78,84,89,95,101,95,89,82,74,66,60,54,49,45,41,39,37,35,34,34,34,35,35,37,39,41,44,48,53,59,65,72,79,85,90,95,102,96,90,83,76,69,62,56,50,46,43,40,38,37,36,35,35,36,37,38,40,43,46,50,55,61,67,74,80,86,91,96,104,97,91,85,78,71,64,58,53,48,45,42,40,38,37,37,37,37,38,40,42,44,48,52,57,63,69,76,82,87,92,98,106,99,93,87,81,74,67,61,55,51,47,44,42,40,39,38,39,39,40,42,44,47,50,54,60,66,72,78,84,88,94,100,108,101,95,89,84,77,70,64,58,54,50,47,44,43,41,41,41,41,42,44,46,49,53,57,63,68,75,80,85,90,96,102,110,104,97,91,86,80,73,67,62,57,53,50,47,45,44,44,44,44,45,47,49,52,56,60,66,72,77,82,87,93,98,104,113,106,99,94,88,83,77,71,65,61,57,53,51,49,48,47,47,47,48,50,53,56,60,64,69,75,80,85,90,95,101,107,115,108,102,96,91,86,81,75,70,65,61,57,54,52,51,51,50,51,52,54,57,60,64,68,73,78,83,87,92,98,103,110,118,111,105,99,94,89,84,79,74,69,65,62,59,57,56,55,55,55,57,58,61,64,68,72,77,81,85,90,95,101,107,114,122,115,108,102,97,92,87,83,78,74,70,67,63,61,60,60,59,60,61,63,66,69,72,76,80,84,88,93,98,104,111,119,128,120,112,107,101,96,92,88,84,79,76,72,69,67,66,65,65,66,67,69,71,75,78,81,85,88,92,97,103,108,120,129,135,126,118,112,106,101,97,93,90,86,83,79,76,74,73,72,72,72,73,75,78,81,84,87,90,93,97,102,108,114,126,142};

// CALIBRATION_SHADING_LS_TL84_R
static uint8_t _calibration_shading_ls_tl84_r[] = {167,153,141,133,127,121,116,111,107,102,97,93,90,87,85,84,84,85,86,89,92,97,101,105,109,113,118,123,129,136,149,167,158,147,135,128,121,116,110,105,99,94,89,84,81,78,76,75,75,76,78,80,84,88,93,98,103,108,113,119,124,130,143,155,149,139,131,124,117,112,106,99,93,87,81,77,73,71,69,68,68,69,70,73,77,81,86,92,98,103,109,114,120,126,135,143,143,134,127,119,113,107,100,93,86,80,74,70,66,64,62,61,61,62,64,66,70,74,80,86,92,98,104,110,116,122,129,137,138,129,122,115,109,103,95,88,80,74,68,64,60,58,56,56,56,56,58,60,64,68,73,79,87,93,100,106,112,119,125,133,134,126,119,112,106,98,90,82,74,68,62,58,55,53,51,51,51,51,53,55,58,62,68,74,81,89,96,102,109,115,122,130,131,123,116,109,102,94,85,77,69,63,58,54,51,49,47,47,47,47,48,51,54,58,63,69,76,84,92,99,106,112,119,127,129,120,113,106,98,89,80,72,64,58,53,50,47,45,44,43,43,44,45,47,50,53,58,64,71,79,88,96,103,109,116,125,126,118,110,103,94,85,76,68,60,55,50,46,44,42,41,40,40,41,42,44,46,50,55,60,67,75,84,92,100,107,114,122,124,116,108,101,91,82,72,64,57,51,47,44,41,40,39,38,38,38,40,41,44,47,51,57,64,72,80,89,98,105,112,120,123,114,107,98,88,78,69,61,54,49,45,42,39,38,37,36,36,37,38,39,42,45,49,54,61,69,78,87,95,103,110,118,122,113,105,96,86,76,67,59,52,47,43,40,38,36,35,35,35,35,36,38,40,43,47,52,58,66,75,84,93,101,108,116,121,111,103,94,84,74,65,57,50,45,42,39,37,35,34,34,34,34,35,36,39,41,45,50,56,64,73,82,91,99,107,115,120,111,102,93,82,72,63,56,49,44,41,38,36,34,33,33,33,33,34,36,38,40,44,49,55,62,71,81,90,98,106,114,119,110,102,92,81,71,62,55,48,44,40,37,35,33,33,32,32,33,33,35,37,40,43,48,54,61,70,80,89,98,105,113,119,109,101,91,81,71,62,54,48,43,40,37,35,33,33,32,32,32,33,35,37,39,43,47,54,61,69,79,88,97,104,113,119,109,101,91,81,71,62,54,48,43,40,37,35,33,32,32,32,32,33,35,37,39,43,48,54,61,69,79,89,97,105,113,119,110,101,92,81,71,62,55,49,44,40,37,35,34,33,32,32,33,34,35,37,40,43,48,54,61,70,79,89,98,105,113,120,110,102,93,82,72,63,56,49,44,41,38,36,34,33,33,33,33,34,35,38,40,44,49,55,62,71,80,90,98,105,114,121,111,103,94,84,74,65,57,51,46,42,39,36,35,34,33,33,34,35,36,38,41,45,50,56,64,72,82,91,99,106,114,122,113,105,96,86,76,67,59,52,47,43,40,37,36,35,34,34,35,36,37,40,42,46,52,58,66,74,84,93,100,107,115,123,114,107,98,88,79,69,61,54,49,45,41,39,37,36,36,36,36,37,39,41,44,48,53,60,68,77,86,94,102,108,117,124,116,109,101,92,82,72,64,57,52,47,44,41,39,38,37,37,38,39,41,43,46,51,56,63,71,80,88,96,103,110,118,126,118,111,104,95,85,76,68,61,55,50,46,43,41,40,40,40,40,41,43,46,49,54,59,66,74,83,91,99,105,112,120,129,120,113,106,99,89,80,72,64,58,53,50,47,44,43,42,42,43,44,46,49,52,57,63,70,78,87,94,101,108,115,123,131,123,116,109,102,94,85,77,69,63,58,53,50,48,47,46,46,46,47,50,53,57,62,67,75,82,90,97,104,111,117,125,135,127,119,112,106,99,90,82,74,68,62,58,55,52,51,50,50,50,52,54,57,61,66,72,79,87,94,101,107,114,120,128,137,129,123,116,109,103,95,88,80,74,68,64,60,57,56,55,54,55,57,59,62,67,72,78,85,92,98,104,110,117,124,132,140,132,126,120,113,107,100,93,86,80,74,70,66,63,61,60,60,61,62,65,68,73,78,84,90,96,102,108,114,121,128,136,144,137,130,124,117,111,105,99,93,87,81,76,72,69,68,67,67,67,69,71,75,79,84,90,95,101,106,112,118,125,133,142,152,144,134,128,122,116,110,105,99,94,89,84,80,77,75,74,74,75,76,79,82,86,91,96,101,106,111,117,123,129,142,154,161,150,140,134,127,122,117,113,108,103,98,93,89,86,84,82,82,83,85,88,91,95,99,104,108,112,117,122,128,135,148,166};

// CALIBRATION_SHADING_LS_TL84_G
static uint8_t _calibration_shading_ls_tl84_g[] = {134,123,114,107,101,97,93,90,87,84,81,78,75,74,72,72,72,72,74,75,78,81,84,87,90,92,96,101,106,112,123,136,126,118,109,103,98,93,89,85,82,78,75,71,69,67,66,65,65,66,67,69,72,75,78,82,85,88,92,97,102,107,117,126,119,112,105,99,94,90,85,81,77,73,69,66,63,61,60,60,60,60,62,64,66,69,73,77,81,85,89,93,98,103,110,117,115,108,101,96,91,87,82,77,72,68,64,61,58,57,55,55,55,56,57,59,61,64,68,73,77,81,85,90,95,100,106,112,112,105,99,93,88,84,78,73,68,64,60,56,54,52,51,50,50,51,52,54,57,60,64,68,73,78,82,87,92,97,103,109,109,102,96,91,86,81,75,69,64,59,55,52,50,48,47,47,47,47,48,50,53,56,60,64,69,74,80,84,89,94,100,107,106,100,94,89,83,78,71,66,60,56,52,49,47,45,44,44,44,44,45,47,49,52,56,60,66,71,77,82,87,92,98,104,105,98,92,87,81,74,68,62,57,52,49,46,44,42,41,41,41,41,42,44,46,49,53,57,62,68,74,80,85,90,96,102,103,96,90,85,78,72,65,59,54,50,46,44,41,40,39,39,39,39,40,42,44,46,50,54,59,65,71,77,83,88,94,100,101,95,89,83,76,69,63,57,51,47,44,41,39,38,37,37,37,37,38,40,42,44,48,52,57,62,69,75,81,87,92,99,100,93,88,81,74,67,60,54,49,45,42,40,38,37,36,35,35,36,37,38,40,42,46,50,54,60,67,73,80,85,91,97,99,92,86,80,73,65,58,53,48,44,41,38,37,35,35,34,34,35,35,37,38,41,44,48,53,58,65,72,78,84,89,96,98,92,85,79,71,64,57,51,47,43,40,37,36,34,34,33,33,34,34,36,37,40,43,46,51,57,63,70,77,83,88,94,98,91,85,78,70,63,56,50,46,42,39,37,35,34,33,33,33,33,34,35,37,39,42,45,50,55,62,69,76,82,87,93,98,91,84,77,69,62,55,50,45,41,38,36,35,33,33,32,32,33,33,34,36,38,41,45,49,55,61,68,75,81,87,93,98,90,84,77,69,62,55,49,45,41,38,36,34,33,32,32,32,32,33,34,36,38,41,44,49,54,61,68,75,81,86,92,98,90,84,77,69,62,55,49,45,41,38,36,34,33,32,32,32,32,33,34,36,38,41,44,49,54,61,68,75,81,86,92,98,91,84,77,70,62,55,50,45,41,38,36,34,33,33,32,32,33,33,34,36,38,41,45,49,54,61,68,75,81,86,92,98,91,85,78,70,63,56,50,46,42,39,37,35,34,33,33,33,33,34,35,36,39,41,45,50,55,62,68,75,81,87,93,99,92,86,79,72,64,57,52,47,43,40,37,36,34,34,33,33,33,34,36,37,39,42,46,51,56,63,70,76,82,87,93,100,93,87,80,73,66,59,53,48,44,41,38,37,35,34,34,34,34,35,36,38,40,43,47,52,58,64,71,77,83,88,94,101,94,88,82,75,67,61,55,50,46,42,40,38,36,35,35,35,35,36,38,39,42,45,49,54,59,65,72,78,84,89,95,102,95,89,84,77,70,63,57,52,48,44,41,39,38,37,36,36,37,38,39,41,43,47,51,56,61,68,74,80,85,90,96,104,97,91,86,79,72,66,60,54,50,46,44,41,40,39,38,38,39,39,41,43,46,49,53,58,64,70,76,81,86,92,98,105,99,93,88,82,75,69,63,57,53,49,46,44,42,41,40,40,41,42,43,45,48,52,56,61,66,72,78,83,88,94,100,108,101,95,89,84,78,72,66,61,56,52,49,46,45,44,43,43,43,44,46,48,51,55,59,64,69,75,80,85,90,96,102,110,103,97,91,87,81,75,70,64,60,56,52,50,48,47,46,46,46,47,49,51,54,58,62,67,72,77,82,87,92,98,105,112,105,99,94,89,84,79,73,68,64,60,56,54,52,51,50,50,50,51,53,55,58,62,66,71,75,80,84,89,95,101,107,114,108,102,96,92,87,82,78,73,68,64,61,58,56,55,54,54,54,55,57,60,63,66,70,75,79,83,87,92,98,104,111,118,111,105,100,94,90,86,81,77,73,69,66,63,61,59,59,59,59,60,62,64,67,71,74,78,82,86,90,95,101,108,115,124,117,109,103,98,93,89,85,82,78,74,71,68,66,65,64,64,65,66,67,70,72,75,79,82,85,89,94,99,105,115,125,131,121,113,107,102,97,94,90,87,84,81,78,75,73,71,70,70,71,72,73,76,78,81,84,86,89,93,98,103,110,121,135};

// CALIBRATION_SHADING_LS_TL84_B
static uint8_t _calibration_shading_ls_tl84_b[] = {137,125,114,107,102,97,93,90,87,83,80,77,75,73,72,71,71,72,73,75,78,81,85,88,91,93,97,101,107,113,124,138,128,119,110,104,98,93,89,85,82,78,74,72,69,67,66,65,65,66,67,69,72,75,79,82,86,89,93,98,103,109,119,129,120,113,106,100,95,90,86,82,77,73,69,66,64,62,60,60,60,61,62,64,67,70,74,78,82,86,90,94,100,105,112,119,116,109,103,97,92,87,82,78,73,68,64,61,59,57,56,55,55,56,57,59,62,65,69,73,78,83,87,91,96,102,107,114,112,105,99,94,89,84,79,73,68,64,60,56,54,52,51,50,51,51,53,55,57,61,65,69,74,79,84,88,93,98,104,110,109,103,97,91,87,81,75,70,64,60,56,53,50,49,47,47,47,47,49,51,53,57,60,65,70,75,81,86,90,95,101,108,107,100,94,89,84,78,71,66,60,56,52,49,47,45,44,44,44,44,45,47,50,53,57,61,67,72,78,83,88,93,99,105,105,98,92,87,81,75,68,62,57,53,49,46,44,43,42,41,41,42,43,44,47,50,53,58,63,69,75,81,86,90,96,102,103,97,90,85,79,72,65,59,54,50,46,44,42,40,39,39,39,39,40,42,44,47,51,55,60,66,72,78,84,89,94,100,101,94,89,83,76,69,63,57,52,48,44,41,40,38,37,37,37,37,38,40,42,45,48,52,57,63,69,76,82,87,92,98,100,93,88,81,75,67,60,55,50,46,42,40,38,37,36,35,36,36,37,38,40,43,46,50,55,61,67,74,80,85,91,97,99,92,86,80,73,65,58,53,48,44,41,38,37,35,35,34,34,35,36,37,39,41,45,48,53,59,65,72,78,84,89,95,98,91,85,79,71,64,57,51,47,43,40,37,36,34,34,33,33,34,35,36,38,40,43,47,52,57,64,71,77,83,88,93,98,91,85,78,70,63,56,50,46,42,39,37,35,34,33,33,33,33,34,35,37,39,42,46,50,56,62,69,76,82,87,93,97,90,85,77,69,62,55,50,45,41,38,36,35,33,33,32,32,33,33,35,36,38,41,45,50,55,62,69,76,82,87,92,97,90,84,77,69,62,55,49,45,41,38,36,34,33,32,32,32,32,33,34,36,38,41,45,49,55,61,68,75,81,86,92,97,90,84,77,69,62,55,50,45,41,38,36,34,33,32,32,32,32,33,34,36,38,41,45,49,55,61,68,75,81,86,92,97,91,85,77,70,62,56,50,45,41,39,36,34,33,33,32,32,33,33,35,36,38,41,45,50,55,61,68,75,81,86,92,98,91,85,78,71,63,56,51,46,42,39,37,35,34,33,33,33,33,34,35,37,39,42,45,50,56,62,69,76,82,87,92,99,92,86,79,72,64,58,52,47,43,40,38,36,34,34,33,33,34,34,36,37,40,43,46,51,57,63,70,77,82,87,92,100,93,87,81,73,66,59,53,48,45,41,39,37,35,34,34,34,34,35,37,38,41,44,48,53,58,64,71,77,83,88,93,101,94,89,83,75,68,61,55,50,46,43,40,38,37,36,35,35,36,37,38,40,42,45,49,54,60,66,73,79,84,89,94,102,96,90,84,78,70,64,58,53,48,45,42,40,38,37,37,37,37,38,39,41,44,47,52,56,62,68,75,80,85,90,96,104,98,92,86,80,73,66,60,55,51,47,44,42,40,39,38,38,39,40,41,43,46,50,54,59,64,71,77,82,87,92,98,106,100,94,88,83,76,70,63,58,54,50,47,44,43,41,41,41,41,42,44,46,49,53,57,62,67,73,79,84,89,94,100,109,102,96,91,85,79,73,67,62,57,53,50,47,45,44,44,43,44,45,47,49,52,56,60,65,70,76,81,86,91,96,102,111,104,98,93,88,82,76,71,65,61,57,53,51,49,47,47,47,47,48,50,52,55,59,63,68,73,79,84,88,94,99,105,114,107,101,95,90,85,80,75,69,65,61,57,54,52,51,50,50,51,52,54,56,59,63,67,72,77,81,86,91,96,102,108,117,110,104,98,93,88,84,79,74,69,65,62,59,57,55,55,54,55,56,58,61,64,67,71,76,80,84,88,93,100,105,112,121,114,107,101,96,91,87,83,78,74,70,66,63,61,60,59,59,60,61,62,65,68,72,75,79,83,87,91,97,102,109,117,128,120,111,106,100,95,91,87,83,79,75,72,69,67,66,65,65,65,66,68,71,73,77,80,83,87,91,96,101,107,117,127,135,125,117,111,105,100,96,93,89,86,82,79,76,74,72,71,71,71,73,75,77,80,83,86,88,91,95,100,105,112,124,138};

// CALIBRATION_SHADING_LS_D65_R
static uint8_t _calibration_shading_ls_d65_r[] = {165,151,139,131,125,119,114,110,105,100,96,92,88,85,84,83,83,83,85,88,91,95,99,103,107,111,116,121,127,134,147,164,155,144,134,126,120,114,109,103,98,93,88,83,80,77,75,74,74,75,77,79,83,87,92,96,101,106,111,116,122,129,141,152,146,137,129,122,116,110,104,98,92,86,80,76,73,70,68,67,67,68,70,72,76,80,85,91,96,102,107,112,118,124,132,140,141,132,125,117,112,106,99,92,86,79,74,70,66,63,62,61,61,62,63,66,69,73,79,84,91,97,103,108,114,120,127,135,136,128,120,114,108,102,94,87,79,73,68,63,60,58,56,55,55,56,57,60,63,67,72,79,85,92,98,104,110,116,123,131,133,124,117,111,104,97,89,81,73,67,62,58,55,53,51,50,50,51,52,55,58,62,67,73,80,87,95,101,107,113,120,128,130,121,114,108,101,93,84,76,68,62,57,53,50,48,47,46,46,47,48,50,53,57,62,68,75,83,90,98,104,110,117,125,127,119,111,104,97,88,79,71,64,58,53,49,47,45,44,43,43,43,45,47,49,53,58,64,70,78,86,94,101,107,114,122,124,116,109,102,93,84,75,67,60,54,50,46,44,42,41,40,40,41,42,44,46,50,54,60,67,74,83,91,98,105,112,120,122,114,107,99,90,81,72,64,57,51,47,44,41,40,38,38,38,38,39,41,44,47,51,57,63,71,79,88,96,103,110,118,121,112,105,97,88,78,69,61,54,49,45,42,39,38,37,36,36,37,38,39,41,45,49,54,60,68,76,85,94,101,108,116,120,111,103,95,85,75,66,58,52,47,43,40,38,36,35,35,35,35,36,38,40,43,47,52,58,65,74,83,92,99,106,114,119,110,102,93,83,73,64,57,50,45,42,39,37,35,34,34,34,34,35,36,38,41,45,50,56,63,72,81,90,98,105,113,119,109,101,92,81,72,63,55,49,44,41,38,36,34,33,33,33,33,34,35,37,40,44,48,54,62,70,79,89,96,104,112,118,108,100,91,81,71,62,54,48,44,40,37,35,34,33,32,32,33,33,35,37,40,43,48,53,61,69,78,88,96,103,111,118,108,100,90,80,70,61,54,48,43,40,37,35,33,33,32,32,32,33,35,37,39,43,47,53,60,69,78,87,95,103,111,118,108,100,90,80,70,61,54,48,43,40,37,35,33,33,32,32,32,33,35,37,39,43,47,53,60,69,78,87,95,103,111,118,109,100,91,81,71,62,55,48,44,40,37,35,34,33,32,32,33,33,35,37,40,43,48,54,61,69,78,88,96,103,111,118,109,101,92,82,72,63,55,49,44,41,38,36,34,33,33,33,33,34,35,37,40,44,48,55,62,70,79,88,96,103,112,119,110,102,94,83,74,65,57,50,46,42,39,36,35,34,33,33,34,35,36,38,41,45,50,56,63,71,81,90,97,104,113,120,111,104,95,85,75,66,59,52,47,43,40,38,36,35,34,34,35,36,37,39,42,46,51,57,65,73,82,91,98,105,113,121,113,105,97,88,78,69,61,54,49,45,42,39,37,36,36,36,36,37,39,41,44,48,53,60,67,76,84,93,100,107,115,123,115,107,100,91,81,72,64,57,52,47,44,41,39,38,37,37,38,39,41,43,46,50,56,62,70,78,87,95,102,108,116,125,117,110,103,94,85,76,68,60,55,50,46,43,41,40,40,39,40,41,43,45,49,53,59,66,73,82,90,97,103,111,119,127,119,112,105,98,89,80,72,64,58,53,50,47,44,43,42,42,43,44,46,49,52,57,63,70,77,85,93,99,106,113,121,130,122,115,108,101,93,85,76,69,63,57,53,50,48,47,46,45,46,47,49,52,56,61,67,74,81,89,96,102,109,116,123,133,125,118,111,105,97,89,81,74,68,62,58,54,52,51,50,50,50,51,54,57,61,66,72,79,86,93,99,105,112,118,126,136,128,121,115,108,102,94,87,79,73,68,63,60,57,55,54,54,55,56,59,62,66,71,77,84,90,97,103,109,115,122,129,139,131,125,118,112,106,99,93,86,79,74,69,65,63,61,60,60,60,62,64,68,72,77,83,89,95,100,106,113,119,126,134,143,135,128,122,116,110,104,98,92,86,80,76,72,69,67,66,66,67,68,71,74,78,83,89,94,99,105,110,116,123,131,140,151,142,133,127,121,115,109,104,98,93,88,83,79,76,74,73,73,74,76,78,81,85,90,95,99,104,109,115,121,128,140,151,160,149,139,133,127,121,116,111,106,101,97,92,88,85,83,82,81,82,84,87,90,94,98,102,106,110,115,121,127,134,147,164};

// CALIBRATION_SHADING_LS_D65_G
static uint8_t _calibration_shading_ls_d65_g[] = {133,122,113,106,101,96,92,89,86,83,80,77,75,73,72,71,71,72,73,75,77,80,83,86,89,92,95,100,105,111,122,135,126,117,108,102,97,92,88,85,81,77,74,71,69,67,65,65,65,66,67,69,71,74,77,81,84,87,91,96,101,106,116,126,119,111,104,98,93,89,85,81,76,72,69,66,63,61,60,59,59,60,61,63,66,69,73,76,80,84,88,92,97,102,109,116,114,107,101,95,90,86,81,77,72,68,64,61,58,56,55,54,55,55,56,58,61,64,68,72,76,81,85,89,94,99,105,112,111,104,98,92,88,83,78,73,68,63,59,56,54,52,51,50,50,51,52,54,56,60,63,68,72,77,82,86,91,96,102,109,108,101,95,90,85,80,74,69,64,59,55,52,50,48,47,47,47,47,48,50,52,56,59,64,69,74,79,84,88,94,99,106,106,99,93,88,83,77,71,65,60,55,52,49,47,45,44,43,43,44,45,47,49,52,56,60,65,71,76,81,86,91,97,104,104,97,91,86,80,74,68,62,57,52,49,46,44,42,41,41,41,41,42,44,46,49,52,57,62,67,73,79,84,89,95,101,102,96,90,84,78,71,65,59,54,50,46,43,41,40,39,39,39,39,40,41,44,46,50,54,59,65,71,77,82,87,93,99,101,94,88,82,76,69,62,56,51,47,44,41,39,38,37,37,37,37,38,39,41,44,47,51,56,62,68,75,81,86,91,98,99,93,87,81,74,67,60,54,49,45,42,40,38,37,36,35,35,36,37,38,40,42,45,49,54,60,66,73,79,85,90,96,98,92,86,80,72,65,58,52,48,44,41,38,37,35,35,34,34,35,35,37,38,41,44,48,52,58,64,71,77,83,89,95,98,91,85,78,71,64,57,51,46,43,40,37,36,34,34,33,33,34,34,36,37,39,42,46,51,56,63,70,76,82,87,93,98,91,84,77,70,63,56,50,46,42,39,37,35,34,33,33,33,33,34,35,36,39,41,45,50,55,62,68,75,81,87,93,97,90,84,77,69,62,55,50,45,41,38,36,35,33,33,32,32,33,33,34,36,38,41,44,49,54,61,68,74,80,86,92,97,90,84,77,69,62,55,49,45,41,38,36,34,33,32,32,32,32,33,34,36,38,41,44,49,54,60,67,74,80,86,92,97,90,84,77,69,62,55,49,45,41,38,36,34,33,32,32,32,32,33,34,36,38,41,44,49,54,60,67,74,80,85,92,97,90,84,77,69,62,55,50,45,41,38,36,35,33,33,32,32,33,33,34,36,38,41,44,49,54,60,67,74,80,86,92,98,91,85,78,70,63,56,50,46,42,39,37,35,34,33,33,33,33,34,35,36,39,41,45,50,55,61,68,75,81,86,92,98,92,86,79,71,64,57,52,47,43,40,37,36,34,34,33,33,33,34,36,37,39,42,46,51,56,62,69,76,81,87,93,99,92,87,80,73,66,59,53,48,44,41,38,37,35,34,34,34,34,35,36,38,40,43,47,52,57,63,70,77,82,87,93,100,94,88,82,75,67,61,55,50,46,42,40,38,36,35,35,35,36,36,38,39,42,45,49,53,59,65,72,78,83,88,94,102,95,89,83,77,70,63,57,52,48,44,41,39,38,37,36,36,37,38,39,41,43,47,51,55,61,67,73,79,84,90,96,103,97,91,85,79,72,66,60,54,50,46,44,41,40,39,38,38,39,39,41,43,45,49,53,58,63,69,75,81,86,91,97,105,98,92,87,81,75,69,63,57,53,49,46,44,42,41,40,40,41,42,43,45,48,51,56,61,66,72,77,82,87,93,99,107,101,94,89,84,78,72,66,61,56,52,49,47,45,44,43,43,43,44,46,48,51,54,59,64,69,74,79,84,89,95,101,110,103,97,91,86,81,75,70,64,60,56,53,50,48,47,46,46,46,47,49,51,54,58,62,67,72,77,82,86,91,97,104,112,105,99,94,89,84,79,73,68,64,60,56,54,52,51,50,50,50,51,53,55,58,62,66,71,75,80,84,89,94,100,107,114,108,102,96,91,87,82,78,73,68,64,61,58,56,55,54,54,54,55,57,60,62,66,70,74,78,82,86,91,97,103,110,118,111,105,100,94,90,85,81,77,73,69,66,63,61,59,59,58,59,60,62,64,67,70,74,78,81,85,89,95,100,107,115,124,116,109,103,98,93,89,85,82,78,74,71,68,66,65,64,64,64,65,67,69,72,75,78,81,85,88,93,98,104,114,124,131,121,113,107,102,97,94,90,87,84,81,77,75,73,71,70,70,70,72,73,75,78,81,83,86,89,92,97,103,109,120,134};

// CALIBRATION_SHADING_LS_D65_B
static uint8_t _calibration_shading_ls_d65_b[] = {136,124,113,107,101,96,92,90,86,83,80,77,74,72,71,71,71,71,73,75,78,81,84,87,90,93,96,101,106,113,123,136,128,118,109,103,97,92,89,85,81,77,74,71,68,67,65,65,65,66,67,69,72,75,78,82,85,89,93,97,103,109,118,127,119,112,106,100,94,90,86,81,77,73,69,66,63,61,60,60,60,60,62,64,67,70,74,78,82,86,89,94,99,105,111,118,115,108,102,96,91,87,82,77,72,68,64,61,58,56,55,55,55,56,57,59,61,65,69,73,78,82,86,90,95,101,107,113,112,105,99,93,88,84,79,73,68,64,60,56,54,52,51,50,51,51,52,54,57,60,64,69,74,79,83,88,92,98,104,110,109,102,96,91,86,81,75,69,64,60,56,52,50,48,47,47,47,47,49,50,53,56,60,65,70,75,80,85,90,95,101,107,106,100,94,89,83,77,71,66,60,56,52,49,47,45,44,44,44,44,45,47,50,53,57,61,66,72,77,83,88,92,98,104,104,98,92,86,81,74,68,62,57,53,49,46,44,42,41,41,41,42,43,44,47,50,53,58,63,69,75,80,85,90,96,102,102,96,90,85,78,72,65,59,54,50,46,44,42,40,39,39,39,39,40,42,44,47,50,55,60,66,72,78,83,88,94,100,100,94,88,83,76,69,63,57,51,47,44,41,40,38,37,37,37,37,38,40,42,45,48,52,57,63,69,76,82,87,92,98,99,93,87,81,74,67,60,54,49,45,42,40,38,37,36,35,35,36,37,38,40,43,46,50,55,61,67,74,80,85,90,96,98,92,86,80,72,65,58,53,48,44,41,38,37,35,35,34,34,35,36,37,39,41,44,48,53,59,65,72,78,84,89,95,97,91,85,78,71,64,57,51,47,43,40,37,36,34,34,33,33,34,35,36,38,40,43,47,52,57,63,70,77,82,87,93,97,90,84,77,70,63,56,50,46,42,39,37,35,34,33,33,33,33,34,35,37,39,42,46,50,56,62,69,76,82,87,92,97,90,84,77,69,62,55,50,45,41,38,36,35,33,33,32,32,33,33,35,36,38,41,45,50,55,61,68,75,81,86,91,97,90,84,77,69,62,55,49,45,41,38,36,34,33,32,32,32,32,33,34,36,38,41,45,49,55,61,68,75,81,86,91,97,90,84,77,69,62,55,49,45,41,38,36,34,33,32,32,32,32,33,34,36,38,41,45,49,54,61,68,75,81,86,91,97,90,84,77,69,62,55,50,45,42,39,36,34,33,33,32,32,33,33,34,36,38,41,45,49,55,61,68,75,81,86,91,98,91,85,78,70,63,56,51,46,42,39,37,35,34,33,33,33,33,34,35,37,39,42,45,50,55,62,69,75,81,86,92,98,92,86,79,71,64,58,52,47,43,40,38,36,34,34,33,33,33,34,36,37,40,43,46,51,57,63,70,76,82,87,92,99,93,87,80,73,66,59,53,48,44,41,39,37,35,34,34,34,35,35,37,38,41,44,48,52,58,64,71,77,83,87,93,101,94,88,82,75,68,61,55,50,46,43,40,38,37,36,35,35,36,37,38,40,42,45,49,54,60,66,72,78,84,88,94,102,96,90,84,77,70,64,58,53,48,45,42,40,38,37,37,37,37,38,40,41,44,47,51,56,62,68,74,80,85,90,96,104,97,92,86,80,73,66,60,55,51,47,44,42,40,39,39,39,39,40,41,44,46,50,54,59,64,70,76,82,87,92,98,105,99,94,88,82,76,70,64,58,54,50,47,44,43,42,41,41,41,42,44,46,49,52,57,62,67,73,79,84,88,94,100,108,102,96,90,85,79,73,67,62,57,53,50,47,46,44,44,43,44,45,47,49,52,56,60,65,70,76,81,85,90,96,102,111,104,98,93,88,82,76,71,65,61,57,53,51,49,48,47,47,47,48,50,52,55,59,63,68,73,78,83,88,93,99,105,114,107,101,95,90,85,80,75,69,65,61,57,54,52,51,50,50,51,52,54,56,59,63,67,72,77,81,85,90,96,102,108,116,110,104,98,93,88,84,79,74,69,65,62,59,57,55,55,54,55,56,58,60,64,67,71,75,80,84,88,93,99,105,112,121,113,107,101,96,91,87,82,78,74,70,66,63,61,60,59,59,60,61,62,65,68,72,75,79,83,87,91,96,102,109,117,127,119,111,106,100,95,91,87,83,79,75,72,69,67,66,65,65,65,66,68,70,73,77,80,83,86,90,95,101,107,117,127,135,125,117,110,104,100,96,93,89,85,82,79,76,73,72,71,71,71,72,74,77,80,82,85,88,91,95,100,105,112,124,139};

// R G B
static uint16_t _calibration_awb_warming_ls_a[] = {265, 256, 305};

// R G B
static uint16_t _calibration_awb_warming_ls_d75[] = {240, 256, 330};

// R G B
static uint16_t _calibration_awb_warming_ls_d50[] = {270, 256, 280};

// CALIBRATION_NOISE_PROFILE
static uint8_t _calibration_noise_profile[] = {0,0,0,0,0,0,0,0,13,22,26,29,32,34,36,37,39,40,41,42,43,43,45,45,46,47,47,48,48,49,49,50,50,51,51,52,52,53,53,53,54,54,54,55,55,55,56,56,56,56,57,57,57,57,58,58,58,58,59,59,59,59,59,60,60,60,60,60,61,61,61,61,61,62,62,62,62,62,62,63,63,63,63,63,63,63,64,64,64,64,64,64,64,65,65,65,65,65,65,65,65,66,66,66,66,66,66,66,66,67,67,67,67,67,67,67,67,67,68,68,68,68,68,68,68,68,68,68};

// CALIBRATION_DEMOSAIC
static uint8_t _calibration_demosaic[] = {1,17,27,31,34,37,39,41,42,44,45,46,47,48,49,50,51,51,52,53,53,53,54,55,55,56,56,57,57,57,58,58,59,59,59,60,60,60,61,61,61,61,62,62,62,62,63,63,63,63,64,64,64,64,65,65,65,65,65,66,66,66,66,66,67,67,67,67,67,67,68,68,68,68,68,68,68,69,69,69,69,69,69,70,70,70,70,70,70,70,70,71,71,71,71,71,71,71,71,72,72,72,72,72,72,72,72,72,73,73,73,73,73,73,73,73,73,73,74,74,74,74,74,74,74,74,74,74};

// 8-bit normalised noise profile for WDR stitching
static uint8_t _calibration_wdr_np_lut[] = {14, 27, 35, 42, 48, 53, 57, 62, 66, 69, 73, 76, 80, 83, 86, 89, 92, 94, 97, 100, 102, 105, 107, 109, 112, 114, 116, 118, 120, 123, 125, 127, 129, 131, 133, 134, 136, 138, 140, 142, 144, 145, 147, 149, 151, 152, 154, 156, 157, 159, 160, 162, 164, 165, 167, 168, 170, 171, 173, 174, 176, 177, 178, 180, 181, 183, 184, 185, 187, 188, 190, 191, 192, 194, 195, 196, 197, 199, 200, 201, 203, 204, 205, 206, 208, 209, 210, 211, 212, 214, 215, 216, 217, 218, 219, 221, 222, 223, 224, 225, 226, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255};

// CALIBRATION_GAMMA
static uint16_t _calibration_gamma[] = {0, 280, 519, 728, 893, 1030, 1148, 1253, 1346, 1431, 1510, 1580, 1646, 1708, 1765, 1821, 1873, 1924, 1972, 2020, 2067, 2111, 2155, 2198, 2241, 2281, 2321, 2360, 2398, 2435, 2472, 2506, 2541, 2574, 2607, 2639, 2670, 2700, 2729, 2758, 2786, 2813, 2840, 2866, 2891, 2915, 2939, 2964, 2987, 3009, 3032, 3054, 3076, 3097, 3118, 3138, 3158, 3178, 3198, 3217, 3236, 3254, 3273, 3291, 3308, 3327, 3343, 3361, 3378, 3395, 3411, 3427, 3443, 3459, 3475, 3490, 3505, 3520, 3535, 3550, 3564, 3579, 3593, 3606, 3620, 3634, 3647, 3661, 3673, 3687, 3699, 3712, 3724, 3736, 3749, 3760, 3772, 3784, 3796, 3807, 3819, 3830, 3841, 3852, 3863, 3874, 3885, 3896, 3906, 3917, 3927, 3937, 3947, 3957, 3967, 3977, 3986, 3996, 4006, 4015, 4024, 4033, 4042, 4052, 4061, 4069, 4078, 4087, 4095};

// CALIBRATION_IRIDIX_ASYMMETRY
static uint32_t _calibration_iridix_asymmetry[] = {0,62836,120267,172961,221481,266305,307839,346432,382386,415964,447392,476871,504577,530666,555274,578524,600526,621378,641167,659973,677867,694914,711172,726696,741534,755730,769325,782356,794859,806864,818400,829495,840173,850457,860369,869929,879155,888064,896672,904994,913045,920837,928383,935693,942780,949653,956321,962794,969080,975187,981123,986894,992508,997970,1003288,1008466,1013509,1018424,1023215,1027887,1032443,1036889,1041228,1045464,1048575};

static uint32_t _calibration_ca_filter_mem[] = {32768,229629,491259,4278943225,4279204855,4262689525,4246239220,4229788915,4213338610,4196888050,4197214450,4180763890,4164313330,4147928050,4131477235,4115091955,4098641140,4082190325,4082516470,4066065655,4066391800,4066652665,4066913530,4067239930,4067500795,4084473340,4101445885,4118418430,4152037375,4185721855,4219340544,4253025024};

// calibration_awb_scene_presets in the following order AWB_DAY_LIGHT AWB_CLOUDY AWB_INCANDESCENT AWB_FLOURESCENT AWB_TWILIGHT AWB_SHADE AWB_WARM_FLOURESCENT
static uint16_t _calibration_awb_scene_presets[7][2] = {
  { 256, 256 },
  { 331, 220 },
  { 169, 386 },
  { 219, 287 },
  { 219, 287 },
  { 377, 200 },
  { 178, 358 }
};

// CALIBRATION_CA_CORRECTION: MIN_CORRECTION, MESH_WIDTH, MESH_HEIGHT
static uint16_t _calibration_ca_correction[] = {1, 64, 64};

static uint16_t _calibration_ca_correction_mem[][10] = {
  { 65516, 65534, 65531, 65534, 33, 8, 5, 12, 65531, 65459 },
  { 0, 65530, 3, 65518, 6, 4, 29, 65531, 8, 65470 },
  { 65513, 1, 65514, 1, 32, 20, 9, 65534, 65527, 12 },
  { 1, 65521, 1, 11, 5, 11, 65519, 65531, 16, 10 }};

static uint32_t _calibration_lut3d_mem[] = {0x00000C00, 0x01CFFBFE, 0x005043FF, 0x01F05001, 0x00100027, 0x019FFC25, 0x00304816, 0x02109020, 0x032033FE, 0x04A073FF, 0x03707BFF, 0x04F0C801, 0x022FF013, 0x034FF80E, 0x03606008, 0x04A093FF, 0x05C09800, 0x0700C402, 0x0630F401, 0x07712403, 0x0460100E, 0x05A0340E, 0x0600C403, 0x0750F408, 0x0810E405, 0x09011006, 0x08815405, 0x09617407, 0x06A04C10, 0x07605814, 0x0861180B, 0x09512C0D, 0x09C13807, 0x00000000, 0x0A119409, 0x00000000, 0x08407414, 0x00000000, 0x0A31600D, 0x00000000, 0x01206FFF, 0x029093FF, 0x01B0D3FF, 0x02E0FC00, 0x01607403, 0x0210A80A, 0x01C0D405, 0x0270E001, 0x03F0BFFF, 0x0540F001, 0x04812802, 0x05913003, 0x03C0C00A, 0x0510E801, 0x04411002, 0x05812C06, 0x06712002, 0x07B15406, 0x06B14C04, 0x07E17C08, 0x06812008, 0x07C1580B, 0x06C1540B, 0x0811880D, 0x08C17C07, 0x09A1A00A, 0x08F1A809, 0x09E1D00C, 0x08D17C0C, 0x09A19C0F, 0x0911B00F, 0x09E1D011, 0x0A51C00B, 0x00000000, 0x0A91F00E, 0x00000000, 0x0A61B810, 0x00000000, 0x0AA1EC13, 0x00000000, 0x02713800, 0x03716403, 0x0331B407, 0x0401D409, 0x0261340B, 0x03114C08, 0x0311AC13, 0x03D1CC10, 0x04F18406, 0x06219008, 0x0561F40C, 0x0691FC0D, 0x04B1780A, 0x06219C0E, 0x0531F011, 0x06920813, 0x06F19007, 0x0811A40A, 0x07C2080E, 0x0881FC0F, 0x07219C0D, 0x0841B40F, 0x07F21C16, 0x08D21415, 0x0931D00C, 0x0A21FC0E, 0x0982080F, 0x0A722C12, 0x0961E012, 0x0A320014, 0x09B21C16, 0x0A923417, 0x0AE21811, 0x00000000, 0x0B324814, 0x00000000, 0x0AF21C16, 0x00000000, 0x0B224C19, 0x00000000, 0x03C2200E, 0x04623811, 0x04226C13, 0x04A28415, 0x03D2241A, 0x04623817, 0x04227820, 0x04A2841B, 0x05B25013, 0x06F26013, 0x05C29417, 0x0702A818, 0x05725417, 0x06D2681A, 0x0562901B, 0x06E2A81E, 0x08326C15, 0x09728017, 0x0842B019, 0x0992C41B, 0x0832781C, 0x09928C1E, 0x0832B81F, 0x0992CC21, 0x0A126C17, 0x0AE27416, 0x0AC2D81E, 0x0B52C41D, 0x0A427C1D, 0x0AF2781C, 0x0AE2E424, 0x0B72D023, 0x0B728017, 0x00000000, 0x0BF2C41D, 0x00000000, 0x0B82841D, 0x00000000, 0x0C02C822, 0x00000000, 0x0492C017, 0x0512CC19, 0x00000000, 0x00000000, 0x0482C822, 0x04E2C81D, 0x00000000, 0x00000000, 0x05F2D819, 0x0762E81A, 0x00000000, 0x00000000, 0x0582D41E, 0x0712E821, 0x00000000, 0x00000000, 0x0882F01B, 0x09B3001E, 0x00000000, 0x00000000, 0x0842F021, 0x09930423, 0x00000000, 0x00000000, 0x0AE3141F, 0x0BD31C21, 0x00000000, 0x00000000, 0x0AD31425, 0x0BE32426, 0x00000000, 0x00000000, 0x0C430821, 0x00000000, 0x00000000, 0x00000000, 0x0C630C26, 0x00000000, 0x00000000, 0x00000000, 0x00101C54, 0x00E0145E, 0x00003045, 0x01505C43, 0x00203C70, 0x00B02473, 0x0020546A, 0x00B07469, 0x0240205C, 0x03301844, 0x02B05443, 0x03304028, 0x02403075, 0x03303874, 0x01D05C6A, 0x03006C69, 0x03F00C39, 0x04D01437, 0x04C05C1D, 0x06408415, 0x04303C62, 0x05003851, 0x04206052, 0x05205C42, 0x05A01C37, 0x06702C3E, 0x0750A013, 0x0810A816, 0x05D03C4F, 0x06904051, 0x0620643E, 0x06E0743F, 0x06F03840, 0x00000000, 0x08F0D416, 0x00000000, 0x07304855, 0x00000000, 0x07908841, 0x00000000, 0x0070883A, 0x0190C03D, 0x01911433, 0x02910C2B, 0x0020A866, 0x00B0B06B, 0x00D0F462, 0x01110065, 0x04611C48, 0x0520E423, 0x03E12C23, 0x0561381F, 0x0310E45C, 0x0440D85C, 0x0361405C, 0x06619468, 0x06610C0E, 0x07E1480F, 0x06A14C0C, 0x08219012, 0x04E0D440, 0x06A0E833, 0x06E15C40, 0x07E17826, 0x09017411, 0x09D18814, 0x0921B414, 0x0A11CC17, 0x07F10028, 0x08C11024, 0x0921A022, 0x09E1B422, 0x0A719C14, 0x00000000, 0x0AA1E417, 0x00000000, 0x09812823, 0x00000000, 0x0A81BC21, 0x00000000, 0x02816026, 0x03515C1E, 0x0361D022, 0x03F1D01F, 0x0201A067, 0x0281A062, 0x03221C65, 0x03B21459, 0x04516010, 0x05D18810, 0x04E1E01A, 0x0642081A, 0x0441904B, 0x05A1B43F, 0x05320041, 0x0611F82D, 0x07219C12, 0x0861C015, 0x07D2201B, 0x08F2201B, 0x0751B83B, 0x0861C422, 0x07A21426, 0x09022827, 0x0981E817, 0x0A52081A, 0x09D2281C, 0x0AA2441E, 0x09B1FC21, 0x0A921420, 0x0A023426, 0x0AD24C22, 0x0AF21C1C, 0x00000000, 0x0B32501F, 0x00000000, 0x0B122020, 0x00000000, 0x0B525424, 0x00000000, 0x0402442B, 0x04924429, 0x04329431, 0x04D2982F, 0x03E2886C, 0x04827C5B, 0x0452D46E, 0x04D2CC5D, 0x05525022, 0x0682641F, 0x05829C29, 0x0652A423, 0x05D27447, 0x06926C34, 0x0602C44E, 0x06C2C040, 0x08027C20, 0x09929824, 0x07E2BC25, 0x0972D027, 0x07C2802C, 0x0982A02A, 0x0792BC31, 0x0932D02C, 0x0A829024, 0x0B228C23, 0x0AE2EC2A, 0x0BA2E029, 0x0AA29C2B, 0x0B42942A, 0x0AE2F02D, 0x0BB2EC2E, 0x0BA28822, 0x00000000, 0x0C22D428, 0x00000000, 0x0BB29027, 0x00000000, 0x0C22DC2D, 0x00000000, 0x0492DC37, 0x0532D833, 0x00000000, 0x00000000, 0x04B30864, 0x05230059, 0x00000000, 0x00000000, 0x05C2D829, 0x0692E424, 0x00000000, 0x00000000, 0x0672FC4E, 0x0702F840, 0x00000000, 0x00000000, 0x07E2F026, 0x09630428, 0x00000000, 0x00000000, 0x07B2F433, 0x0913042E, 0x00000000, 0x00000000, 0x0AC3182A, 0x0BF32C2D, 0x00000000, 0x00000000, 0x0A93142E, 0x0C033031, 0x00000000, 0x00000000, 0x0C63142B, 0x00000000, 0x00000000, 0x00000000, 0x0C732031, 0x00000000, 0x00000000, 0x00000000, 0x0020588A, 0x0080348A, 0x0020788B, 0x00A0988D, 0x002074A0, 0x00A04C9D, 0x003098A6, 0x0090B8A9, 0x0200348E, 0x02F04C8D, 0x0180708A, 0x0300808A, 0x01803C9F, 0x02F050A1, 0x010084A3, 0x02C07CA3, 0x0410548D, 0x0520587E, 0x0410848B, 0x05207870, 0x03E068A1, 0x050070A3, 0x03D09CA5, 0x0510A0A7, 0x05D04C69, 0x06805064, 0x05F0705B, 0x06B0785A, 0x05F0789A, 0x06A07087, 0x06009C95, 0x06B0947D, 0x07205C66, 0x00000000, 0x0740845D, 0x00000000, 0x07306C80, 0x00000000, 0x07409877, 0x00000000, 0x0020C08D, 0x0090C092, 0x0061148C, 0x0081188F, 0x0020D8AB, 0x0080D8AE, 0x003140B0, 0x00812CB3, 0x0270FC84, 0x02E0D484, 0x02713487, 0x04915C7D, 0x02111CAA, 0x02B0F0A6, 0x01F13CAF, 0x039174A3, 0x0430DC81, 0x05A0DC61, 0x0611587B, 0x06A14859, 0x03F0F0A7, 0x0520F4A8, 0x04114CA3, 0x057158A2, 0x06A0D854, 0x0770DC51, 0x0811544D, 0x08E15842, 0x0620E88C, 0x0700E473, 0x06D14484, 0x07A13871, 0x07F0E053, 0x00000000, 0x0961583E, 0x00000000, 0x07A0E06F, 0x00000000, 0x08412C6D, 0x00000000, 0x00F1608B, 0x0121648B, 0x02B23497, 0x03023893, 0x009188B1, 0x00C18CB4, 0x0161E8B2, 0x0191E8B4, 0x02B18886, 0x0501CC7E, 0x04423C86, 0x0602306F, 0x01819CB2, 0x03D1BCAC, 0x0211F4B2, 0x047228AD, 0x08821487, 0x08D1E05B, 0x0782485F, 0x09424855, 0x0611DCA4, 0x07A1D8A0, 0x06C264A6, 0x0A928CA7, 0x0961F041, 0x0A41F83C, 0x0A32483C, 0x0B12643C, 0x07C1BC84, 0x08E1B476, 0x0A72748A, 0x0A926C6F, 0x0AB1F435, 0x00000000, 0x0B82602C, 0x00000000, 0x0961A46A, 0x00000000, 0x0B325061, 0x00000000, 0x03D2C09C, 0x0432B895, 0x0422F899, 0x0482F492, 0x02F2A0BD, 0x0372ACBD, 0x03E31CC0, 0x046320BD, 0x0512B088, 0x06E2A06E, 0x0562F489, 0x0712F078, 0x03F2C0B9, 0x0622DCB0, 0x04A324B9, 0x066320B0, 0x0802904F, 0x0992A03E, 0x0832E862, 0x0932E047, 0x07D2D8A0, 0x0972DC8D, 0x08031CA4, 0x0953108C, 0x0AC2B041, 0x0B82A842, 0x0AE2FC41, 0x0BF3003E, 0x0B22DC7E, 0x0BB2D064, 0x0AF30C69, 0x0C43145C, 0x0BE2A034, 0x00000000, 0x0C52EC3C, 0x00000000, 0x0C62C455, 0x00000000, 0x0CB3004F, 0x00000000, 0x04732089, 0x04D31C84, 0x00000000, 0x00000000, 0x046340AD, 0x04C340AA, 0x00000000, 0x00000000, 0x05F31C7B, 0x07431C70, 0x00000000, 0x00000000, 0x05333CA5, 0x06C33C9D, 0x00000000, 0x00000000, 0x08431861, 0x09030C4A, 0x00000000, 0x00000000, 0x07E33C97, 0x09333C8B, 0x00000000, 0x00000000, 0x0A63183D, 0x0BF33839, 0x00000000, 0x00000000, 0x0A632C67, 0x0C234051, 0x00000000, 0x00000000, 0x0C93283B, 0x00000000, 0x00000000, 0x00000000, 0x0CD33C52, 0x00000000, 0x00000000, 0x00000000, 0x002088B2, 0x00A05CAF, 0x0030B0B9, 0x0080CCBB, 0x0030A0C5, 0x00A084C1, 0x0030C4CC, 0x00A0E8CD, 0x01303CAD, 0x02D048B0, 0x00F0A0B5, 0x024070B2, 0x01304CBB, 0x02A058BF, 0x0100CCC8, 0x01B080C0, 0x03D070B2, 0x04D07CB3, 0x03B0A0B7, 0x04D0B0B9, 0x03C074C0, 0x04E08CC2, 0x0390A0C4, 0x04D0C4C7, 0x05D084B3, 0x06B08CB0, 0x05E0B0B8, 0x06C0B8B2, 0x05C08CC2, 0x06A098C2, 0x05C0C8C8, 0x06A0C8C8, 0x073090A6, 0x00000000, 0x0750BCA5, 0x00000000, 0x0750A8C2, 0x00000000, 0x0760D8C5, 0x00000000, 0x0020E8C0, 0x0070E8C2, 0x002144C5, 0x007128C8, 0x0020FCD0, 0x0080FCD2, 0x002148D6, 0x007134D7, 0x01B124C1, 0x02610CBC, 0x01713CC7, 0x03418CC1, 0x017134D1, 0x024128CC, 0x014154D7, 0x032190D3, 0x03A0ECBA, 0x04F100BD, 0x03C15CBD, 0x051154BF, 0x0340ECC7, 0x04E10CCB, 0x03A174CE, 0x04B14CCD, 0x05F0FCBE, 0x06C0F8B3, 0x060154C1, 0x06F144AF, 0x05D110CD, 0x06C108CC, 0x05F160D1, 0x06B150D0, 0x0750F8A2, 0x00000000, 0x07A1409C, 0x00000000, 0x076114C7, 0x00000000, 0x076150C9, 0x00000000, 0x00A1B8C9, 0x00C1ACCC, 0x014204CE, 0x016208D0, 0x00A1CCD9, 0x00B1B0DC, 0x016228DE, 0x01A238E2, 0x011194CD, 0x0341B4C9, 0x01C21CD1, 0x034238D0, 0x010198DD, 0x0301B8DB, 0x021244E4, 0x02E23CE4, 0x04F1F4C3, 0x0591C8BE, 0x058250CF, 0x08427CC2, 0x04B204D8, 0x0561D0D0, 0x051244E2, 0x06E27CDE, 0x0691C4C1, 0x0781ACAC, 0x09826CBF, 0x08E244AD, 0x0681C8D4, 0x0701B4D3, 0x07A25CD5, 0x081248D8, 0x0821989B, 0x00000000, 0x098218A1, 0x00000000, 0x0781A0CB, 0x00000000, 0x08921CCB, 0x00000000, 0x02226CCF, 0x027274D3, 0x0312D4D4, 0x0372E4D5, 0x01F270E2, 0x025280E5, 0x02A2B8E2, 0x0302C8E5, 0x02E280D3, 0x040294D2, 0x03F2F8D7, 0x04F314D6, 0x02E294E7, 0x0372B0E9, 0x0372D8E8, 0x03F2E8E9, 0x0652BCCF, 0x08F2F8C5, 0x077338D2, 0x092350C8, 0x05D2D0E9, 0x07B2ECE9, 0x064304E9, 0x08132CE8, 0x0C9308C4, 0x0C0304B6, 0x0AF358B7, 0x0CA360AF, 0x0A3308E0, 0x0B8300DD, 0x0AA370E2, 0x0ED38CE4, 0x0B72DC9F, 0x00000000, 0x0C933487, 0x00000000, 0x0A12C8CC, 0x00000000, 0x0DE37CD8, 0x00000000, 0x03F354D0, 0x046358CC, 0x00000000, 0x00000000, 0x035314E3, 0x03B324E5, 0x00000000, 0x00000000, 0x04D35CC9, 0x05935CC6, 0x00000000, 0x00000000, 0x042334E5, 0x04C344E5, 0x00000000, 0x00000000, 0x079364C1, 0x08E364BA, 0x00000000, 0x00000000, 0x06E360E5, 0x08937CE2, 0x00000000, 0x00000000, 0x09E358AE, 0x0B835083, 0x00000000, 0x00000000, 0x09A384DB, 0x0C43C4D6, 0x00000000, 0x00000000, 0x0D034057, 0x00000000, 0x00000000, 0x00000000, 0x0E33C0BF, 0x00000000, 0x00000000, 0x00000000, 0x0040C0D5, 0x00C0B8D2, 0x0030D8D9, 0x00B0FCDA, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x012070CA, 0x01F06CCB, 0x0110FCD8, 0x0150B0D0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03B07CCE, 0x04C0A8D0, 0x033098CE, 0x0490D8D3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x05C0B4D3, 0x0680B8D2, 0x05B0E4D6, 0x0690E8D6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0750CCD4, 0x00000000, 0x0760F8D7, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002108DC, 0x009114DD, 0x002150E0, 0x009144E0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01313CDE, 0x02614CDA, 0x01015CE2, 0x02D194DF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02D108D3, 0x04610CD4, 0x03919CDB, 0x04214CD6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x05B124D9, 0x06A128DA, 0x05D16CDB, 0x06B170DD, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x076130DA, 0x00000000, 0x077170DC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0081C8E3, 0x0091A0E4, 0x017244E7, 0x019240EA, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x010190E5, 0x02B1B4E3, 0x01D230EB, 0x028218EA, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0441FCE3, 0x0511E8DD, 0x04922CE9, 0x068278E9, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0601BCDC, 0x0721D4E0, 0x073250DF, 0x085250E5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x07C1C8DF, 0x00000000, 0x08B240E4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x021280E9, 0x027294EE, 0x02A2C0EB, 0x0312D4EE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0302A8EF, 0x0372BCF1, 0x0392E4F0, 0x0412F8F1, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0552C8F0, 0x0742C8F0, 0x06131CF0, 0x085344F1, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08C2F8EE, 0x0972E8E6, 0x09A35CF0, 0x0C537CF6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0A12DCEA, 0x00000000, 0x0DB37CF6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x031300EC, 0x03730CEF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03F318F0, 0x045324F0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x05E340F1, 0x07E35CF1, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x091370F1, 0x0C23CCF7, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x11041107, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000};

static uint32_t _calibration_decompander0_mem[] = {0, 32768, 65536, 98304, 131072, 163840, 196608, 229376, 262144, 294912, 327680, 360448, 393216, 425984, 458752, 491520, 524288, 557055, 589823, 622591, 655359, 688127, 720895, 753663, 786431, 819199, 851967, 884735, 917503, 950271, 983039, 1015807, 1048575};

static uint32_t _calibration_decompander1_mem[] = {0, 4096, 8192, 12288, 16384, 20480, 24576, 28672, 32768, 36864, 40960, 45056, 49152, 53248, 57344, 61440, 65536, 69632, 73728, 77824, 81920, 86016, 90112, 94208, 98304, 102400, 106496, 110592, 114688, 118784, 122880, 126976, 131072, 135168, 139264, 143360, 147456, 151552, 155648, 159744, 163840, 167936, 172032, 176128, 180224, 184320, 188416, 192512, 196608, 200704, 204800, 208896, 212992, 217088, 221184, 225280, 229376, 233472, 237568, 241664, 245760, 249856, 253952, 258048, 262144, 266240, 270336, 274432, 278528, 282624, 286720, 290816, 294912, 299008, 303104, 307200, 311296, 315392, 319488, 323584, 327680, 331776, 335872, 339968, 344064, 348160, 352256, 356352, 360448, 364544, 368640, 372736, 376832, 380928, 385024, 389120, 393216, 397312, 401408, 405504, 409600, 413696, 417792, 421888, 425984, 430080, 434176, 438272, 442368, 446464, 450560, 454656, 458752, 462848, 466944, 471040, 475136, 479232, 483328, 487424, 491520, 495616, 499712, 503808, 507904, 512000, 516096, 520192, 524288, 528383, 532479, 536575, 540671, 544767, 548863, 552959, 557055, 561151, 565247, 569343, 573439, 577535, 581631, 585727, 589823, 593919, 598015, 602111, 606207, 610303, 614399, 618495, 622591, 626687, 630783, 634879, 638975, 643071, 647167, 651263, 655359, 659455, 663551, 667647, 671743, 675839, 679935, 684031, 688127, 692223, 696319, 700415, 704511, 708607, 712703, 716799, 720895, 724991, 729087, 733183, 737279, 741375, 745471, 749567, 753663, 757759, 761855, 765951, 770047, 774143, 778239, 782335, 786431, 790527, 794623, 798719, 802815, 806911, 811007, 815103, 819199, 823295, 827391, 831487, 835583, 839679, 843775, 847871, 851967, 856063, 860159, 864255, 868351, 872447, 876543, 880639, 884735, 888831, 892927, 897023, 901119, 905215, 909311, 913407, 917503, 921599, 925695, 929791, 933887, 937983, 942079, 946175, 950271, 954367, 958463, 962559, 966655, 970751, 974847, 978943, 983039, 987135, 991231, 995327, 999423, 1003519, 1007615, 1011711, 1015807, 1019903, 1023999, 1028095, 1032191, 1036287, 1040383, 1044479, 1048575};

// CALIBRATION_SHADING_RADIAL_R
static uint16_t _calibration_shading_radial_r[] = {4096,4098,4099,4101,4103,4104,4106,4108,4110,4112,4114,4116,4118,4120,4122,4124,4126,4128,4131,4133,4136,4138,4141,4144,4146,4149,4152,4155,4158,4161,4165,4168,4171,4175,4178,4182,4186,4190,4194,4198,4202,4206,4211,4215,4220,4225,4229,4234,4239,4245,4250,4255,4261,4266,4272,4278,4284,4290,4296,4303,4309,4316,4323,4329,4336,4344,4351,4358,4366,4373,4381,4389,4397,4405,4413,4422,4430,4439,4448,4457,4466,4475,4485,4494,4504,4514,4524,4534,4544,4554,4565,4575,4586,4597,4608,4619,4630,4642,4653,4665,4677,4688,4700,4713,4725,4737,4750,4762,4775,4788,4800,4813,4826,4840,4853,4866,4880,4893,4907,4920,4934,4948,4962,4976,4990,5004,5018,5032,5046};

// CALIBRATION_SHADING_RADIAL_G
static uint16_t _calibration_shading_radial_g[] = {4096,4098,4099,4100,4102,4103,4105,4106,4108,4109,4111,4112,4114,4115,4117,4119,4120,4122,4124,4125,4127,4129,4131,4133,4135,4137,4140,4142,4144,4147,4149,4152,4155,4158,4161,4164,4167,4170,4173,4177,4180,4184,4188,4192,4196,4200,4204,4208,4213,4217,4222,4227,4232,4237,4242,4248,4253,4259,4265,4271,4277,4283,4290,4296,4303,4310,4317,4324,4332,4339,4347,4355,4363,4371,4379,4387,4396,4405,4414,4423,4432,4441,4451,4460,4470,4480,4490,4501,4511,4522,4533,4544,4555,4566,4577,4589,4601,4612,4624,4636,4649,4661,4673,4686,4699,4712,4725,4738,4751,4764,4778,4791,4805,4819,4832,4846,4860,4874,4888,4902,4916,4930,4945,4959,4973,4987,5001,5016,5030};

// CALIBRATION_SHADING_RADIAL_B
static uint16_t _calibration_shading_radial_b[] = {4096,4097,4098,4099,4100,4101,4101,4102,4103,4104,4105,4106,4107,4108,4108,4109,4110,4111,4113,4114,4115,4116,4117,4119,4120,4122,4123,4125,4127,4128,4130,4132,4134,4136,4139,4141,4143,4146,4148,4151,4154,4157,4160,4163,4166,4170,4173,4177,4181,4185,4189,4193,4197,4202,4206,4211,4216,4221,4226,4231,4237,4242,4248,4254,4260,4266,4272,4279,4286,4292,4299,4306,4314,4321,4328,4336,4344,4352,4360,4368,4377,4386,4394,4403,4412,4422,4431,4440,4450,4460,4470,4480,4490,4501,4511,4522,4533,4544,4555,4566,4577,4589,4600,4612,4624,4636,4648,4660,4672,4684,4697,4709,4722,4734,4747,4760,4773,4786,4798,4811,4824,4837,4850,4863,4876,4889,4902,4915,4928};

static LookupTable calibration_shading_radial_r = { .ptr = _calibration_shading_radial_r, .rows = 1, .cols = sizeof(_calibration_shading_radial_r) / sizeof(_calibration_shading_radial_r[0]), .width = sizeof(_calibration_shading_radial_r[0] ) };
static LookupTable calibration_shading_radial_g = { .ptr = _calibration_shading_radial_g, .rows = 1, .cols = sizeof(_calibration_shading_radial_g) / sizeof(_calibration_shading_radial_g[0]), .width = sizeof(_calibration_shading_radial_g[0] ) };
static LookupTable calibration_shading_radial_b = { .ptr = _calibration_shading_radial_b, .rows = 1, .cols = sizeof(_calibration_shading_radial_b) / sizeof(_calibration_shading_radial_b[0]), .width = sizeof(_calibration_shading_radial_b[0] ) };
static LookupTable calibration_decompander0_mem = {.ptr = _calibration_decompander0_mem, .rows = 1, .cols = sizeof( _calibration_decompander0_mem ) / sizeof( _calibration_decompander0_mem[0] ), .width = sizeof( _calibration_decompander0_mem[0] )};
static LookupTable calibration_decompander1_mem = {.ptr = _calibration_decompander1_mem, .rows = 1, .cols = sizeof( _calibration_decompander1_mem ) / sizeof( _calibration_decompander1_mem[0] ), .width = sizeof( _calibration_decompander1_mem[0] )};

static LookupTable calibration_awb_scene_presets = {.ptr = _calibration_awb_scene_presets, .cols = 2, .rows = sizeof( _calibration_awb_scene_presets ) / sizeof( _calibration_awb_scene_presets[0] ), .width = sizeof( _calibration_awb_scene_presets[0][0] )};
static LookupTable calibration_light_src = {.ptr = _calibration_light_src, .cols = 2, .rows = sizeof( _calibration_light_src ) / sizeof( _calibration_light_src[0] ), .width = sizeof( _calibration_light_src[0][0] )};
static LookupTable calibration_rg_pos = {.ptr = _calibration_rg_pos, .rows = 1, .cols = sizeof( _calibration_rg_pos ) / sizeof( _calibration_rg_pos[0] ), .width = sizeof( _calibration_rg_pos[0] )};
static LookupTable calibration_bg_pos = {.ptr = _calibration_bg_pos, .rows = 1, .cols = sizeof( _calibration_bg_pos ) / sizeof( _calibration_bg_pos[0] ), .width = sizeof( _calibration_bg_pos[0] )};
static LookupTable calibration_mesh_rgbg_weight = {.ptr = _calibration_mesh_rgbg_weight, .cols = 15, .rows = sizeof( _calibration_mesh_rgbg_weight ) / sizeof( _calibration_mesh_rgbg_weight[0] ), .width = sizeof( _calibration_mesh_rgbg_weight[0][0] )};
static LookupTable calibration_mesh_ls_weight = {.ptr = _calibration_mesh_ls_weight, .cols = 15, .rows = sizeof( _calibration_mesh_ls_weight ) / sizeof( _calibration_mesh_ls_weight[0] ), .width = sizeof( _calibration_mesh_ls_weight[0][0] )};
static LookupTable calibration_mesh_color_temperature = {.ptr = _calibration_mesh_color_temperature, .cols = 15, .rows = sizeof( _calibration_mesh_color_temperature ) / sizeof( _calibration_mesh_color_temperature[0] ), .width = sizeof( _calibration_mesh_color_temperature[0][0] )};
static LookupTable calibration_wb_strength = {.ptr = _calibration_wb_strength, .rows = 1, .cols = sizeof( _calibration_wb_strength ) / sizeof( _calibration_wb_strength[0] ), .width = sizeof( _calibration_wb_strength[0] )};
static LookupTable calibration_sky_lux_th = {.ptr = _calibration_sky_lux_th, .rows = 1, .cols = sizeof( _calibration_sky_lux_th ) / sizeof( _calibration_sky_lux_th[0] ), .width = sizeof( _calibration_sky_lux_th[0] )};
static LookupTable calibration_ct_rg_pos_calc = {.ptr = _calibration_ct_rg_pos_calc, .rows = 1, .cols = sizeof( _calibration_ct_rg_pos_calc ) / sizeof( _calibration_ct_rg_pos_calc[0] ), .width = sizeof( _calibration_ct_rg_pos_calc[0] )};
static LookupTable calibration_ct_bg_pos_calc = {.ptr = _calibration_ct_bg_pos_calc, .rows = 1, .cols = sizeof( _calibration_ct_bg_pos_calc ) / sizeof( _calibration_ct_bg_pos_calc[0] ), .width = sizeof( _calibration_ct_bg_pos_calc[0] )};
static LookupTable calibration_color_temp = {.ptr = _calibration_color_temp, .rows = 1, .cols = sizeof( _calibration_color_temp ) / sizeof( _calibration_color_temp[0] ), .width = sizeof( _calibration_color_temp[0] )};
static LookupTable calibration_ct65pos = {.ptr = _calibration_ct65pos, .rows = 1, .cols = sizeof( _calibration_ct65pos ) / sizeof( _calibration_ct65pos[0] ), .width = sizeof( _calibration_ct65pos[0] )};
static LookupTable calibration_ct40pos = {.ptr = _calibration_ct40pos, .rows = 1, .cols = sizeof( _calibration_ct40pos ) / sizeof( _calibration_ct40pos[0] ), .width = sizeof( _calibration_ct40pos[0] )};
static LookupTable calibration_ct30pos = {.ptr = _calibration_ct30pos, .rows = 1, .cols = sizeof( _calibration_ct30pos ) / sizeof( _calibration_ct30pos[0] ), .width = sizeof( _calibration_ct30pos[0] )};
static LookupTable calibration_evtolux_ev_lut = {.ptr = _calibration_evtolux_ev_lut, .rows = 1, .cols = sizeof( _calibration_evtolux_ev_lut ) / sizeof( _calibration_evtolux_ev_lut[0] ), .width = sizeof( _calibration_evtolux_ev_lut[0] )};
static LookupTable calibration_evtolux_lux_lut = {.ptr = _calibration_evtolux_lux_lut, .rows = 1, .cols = sizeof( _calibration_evtolux_lux_lut ) / sizeof( _calibration_evtolux_lux_lut[0] ), .width = sizeof( _calibration_evtolux_lux_lut[0] )};
static LookupTable calibration_black_level_r = {.ptr = _calibration_black_level_r, .cols = 2, .rows = sizeof( _calibration_black_level_r ) / sizeof( _calibration_black_level_r[0] ), .width = sizeof( _calibration_black_level_r[0][0] )};
static LookupTable calibration_black_level_gr = {.ptr = _calibration_black_level_gr, .cols = 2, .rows = sizeof( _calibration_black_level_gr ) / sizeof( _calibration_black_level_gr[0] ), .width = sizeof( _calibration_black_level_gr[0][0] )};
static LookupTable calibration_black_level_gb = {.ptr = _calibration_black_level_gb, .cols = 2, .rows = sizeof( _calibration_black_level_gb ) / sizeof( _calibration_black_level_gb[0] ), .width = sizeof( _calibration_black_level_gb[0][0] )};
static LookupTable calibration_black_level_b = {.ptr = _calibration_black_level_b, .cols = 2, .rows = sizeof( _calibration_black_level_b ) / sizeof( _calibration_black_level_b[0] ), .width = sizeof( _calibration_black_level_b[0][0] )};
static LookupTable calibration_static_wb = {.ptr = _calibration_static_wb, .rows = 1, .cols = sizeof( _calibration_static_wb ) / sizeof( _calibration_static_wb[0] ), .width = sizeof( _calibration_static_wb[0] )};
static LookupTable calibration_mt_absolute_ls_a_ccm = {.ptr = _calibration_mt_absolute_ls_a_ccm, .rows = 1, .cols = sizeof( _calibration_mt_absolute_ls_a_ccm ) / sizeof( _calibration_mt_absolute_ls_a_ccm[0] ), .width = sizeof( _calibration_mt_absolute_ls_a_ccm[0] )};
static LookupTable calibration_mt_absolute_ls_d40_ccm = {.ptr = _calibration_mt_absolute_ls_d40_ccm, .rows = 1, .cols = sizeof( _calibration_mt_absolute_ls_d40_ccm ) / sizeof( _calibration_mt_absolute_ls_d40_ccm[0] ), .width = sizeof( _calibration_mt_absolute_ls_d40_ccm[0] )};
static LookupTable calibration_mt_absolute_ls_d50_ccm = {.ptr = _calibration_mt_absolute_ls_d50_ccm, .rows = 1, .cols = sizeof( _calibration_mt_absolute_ls_d50_ccm ) / sizeof( _calibration_mt_absolute_ls_d50_ccm[0] ), .width = sizeof( _calibration_mt_absolute_ls_d50_ccm[0] )};
static LookupTable calibration_shading_ls_a_r = {.ptr = _calibration_shading_ls_a_r, .rows = 1, .cols = sizeof( _calibration_shading_ls_a_r ) / sizeof( _calibration_shading_ls_a_r[0] ), .width = sizeof( _calibration_shading_ls_a_r[0] )};
static LookupTable calibration_shading_ls_a_g = {.ptr = _calibration_shading_ls_a_g, .rows = 1, .cols = sizeof( _calibration_shading_ls_a_g ) / sizeof( _calibration_shading_ls_a_g[0] ), .width = sizeof( _calibration_shading_ls_a_g[0] )};
static LookupTable calibration_shading_ls_a_b = {.ptr = _calibration_shading_ls_a_b, .rows = 1, .cols = sizeof( _calibration_shading_ls_a_b ) / sizeof( _calibration_shading_ls_a_b[0] ), .width = sizeof( _calibration_shading_ls_a_b[0] )};
static LookupTable calibration_shading_ls_tl84_r = {.ptr = _calibration_shading_ls_tl84_r, .rows = 1, .cols = sizeof( _calibration_shading_ls_tl84_r ) / sizeof( _calibration_shading_ls_tl84_r[0] ), .width = sizeof( _calibration_shading_ls_tl84_r[0] )};
static LookupTable calibration_shading_ls_tl84_g = {.ptr = _calibration_shading_ls_tl84_g, .rows = 1, .cols = sizeof( _calibration_shading_ls_tl84_g ) / sizeof( _calibration_shading_ls_tl84_g[0] ), .width = sizeof( _calibration_shading_ls_tl84_g[0] )};
static LookupTable calibration_shading_ls_tl84_b = {.ptr = _calibration_shading_ls_tl84_b, .rows = 1, .cols = sizeof( _calibration_shading_ls_tl84_b ) / sizeof( _calibration_shading_ls_tl84_b[0] ), .width = sizeof( _calibration_shading_ls_tl84_b[0] )};
static LookupTable calibration_shading_ls_d65_r = {.ptr = _calibration_shading_ls_d65_r, .rows = 1, .cols = sizeof( _calibration_shading_ls_d65_r ) / sizeof( _calibration_shading_ls_d65_r[0] ), .width = sizeof( _calibration_shading_ls_d65_r[0] )};
static LookupTable calibration_shading_ls_d65_g = {.ptr = _calibration_shading_ls_d65_g, .rows = 1, .cols = sizeof( _calibration_shading_ls_d65_g ) / sizeof( _calibration_shading_ls_d65_g[0] ), .width = sizeof( _calibration_shading_ls_d65_g[0] )};
static LookupTable calibration_shading_ls_d65_b = {.ptr = _calibration_shading_ls_d65_b, .rows = 1, .cols = sizeof( _calibration_shading_ls_d65_b ) / sizeof( _calibration_shading_ls_d65_b[0] ), .width = sizeof( _calibration_shading_ls_d65_b[0] )};
static LookupTable calibration_awb_warming_ls_a = {.ptr = _calibration_awb_warming_ls_a, .rows = 1, .cols = sizeof( _calibration_awb_warming_ls_a ) / sizeof( _calibration_awb_warming_ls_a[0] ), .width = sizeof( _calibration_awb_warming_ls_a[0] )};
static LookupTable calibration_awb_warming_ls_d50 = {.ptr = _calibration_awb_warming_ls_d50, .rows = 1, .cols = sizeof( _calibration_awb_warming_ls_d50 ) / sizeof( _calibration_awb_warming_ls_d50[0] ), .width = sizeof( _calibration_awb_warming_ls_d50[0] )};
static LookupTable calibration_awb_warming_ls_d75 = {.ptr = _calibration_awb_warming_ls_d75, .rows = 1, .cols = sizeof( _calibration_awb_warming_ls_d75 ) / sizeof( _calibration_awb_warming_ls_d75[0] ), .width = sizeof( _calibration_awb_warming_ls_d75[0] )};
static LookupTable calibration_noise_profile = {.ptr = _calibration_noise_profile, .rows = 1, .cols = sizeof( _calibration_noise_profile ) / sizeof( _calibration_noise_profile[0] ), .width = sizeof( _calibration_noise_profile[0] )};
static LookupTable calibration_demosaic = {.ptr = _calibration_demosaic, .rows = 1, .cols = sizeof( _calibration_demosaic ) / sizeof( _calibration_demosaic[0] ), .width = sizeof( _calibration_demosaic[0] )};
static LookupTable calibration_wdr_np_lut = {.ptr = _calibration_wdr_np_lut, .rows = 1, .cols = sizeof( _calibration_wdr_np_lut ) / sizeof( _calibration_wdr_np_lut[0] ), .width = sizeof( _calibration_wdr_np_lut[0] )};
static LookupTable calibration_gamma = {.ptr = _calibration_gamma, .rows = 1, .cols = sizeof( _calibration_gamma ) / sizeof( _calibration_gamma[0] ), .width = sizeof( _calibration_gamma[0] )};
static LookupTable calibration_iridix_asymmetry = {.ptr = _calibration_iridix_asymmetry, .rows = 1, .cols = sizeof( _calibration_iridix_asymmetry ) / sizeof( _calibration_iridix_asymmetry[0] ), .width = sizeof( _calibration_iridix_asymmetry[0] )};
static LookupTable calibration_ca_filter_mem = {.ptr = _calibration_ca_filter_mem, .rows = 1, .cols = sizeof( _calibration_ca_filter_mem ) / sizeof( _calibration_ca_filter_mem[0] ), .width = sizeof( _calibration_ca_filter_mem[0] )};
static LookupTable calibration_ca_correction = {.ptr = _calibration_ca_correction, .rows = 1, .cols = sizeof( _calibration_ca_correction ) / sizeof( _calibration_ca_correction[0] ), .width = sizeof( _calibration_ca_correction[0] )};
static LookupTable calibration_ca_correction_mem = {.ptr = _calibration_ca_correction_mem, .cols = 10, .rows = sizeof( _calibration_ca_correction_mem ) / sizeof( _calibration_ca_correction_mem[0] ), .width = sizeof( _calibration_ca_correction_mem[0] )};
static LookupTable calibration_lut3d_mem = {.ptr = _calibration_lut3d_mem, .rows = 1, .cols = sizeof( _calibration_lut3d_mem ) / sizeof( _calibration_lut3d_mem[0] ), .width = sizeof( _calibration_lut3d_mem[0] )};

uint32_t get_calibrations_static_linear_imx481( ACameraCalibrations *c )
{
    uint32_t result = 0;
    if ( c != 0 ) {
        c->calibrations[CALIBRATION_SHADING_RADIAL_R] = &calibration_shading_radial_r;
        c->calibrations[CALIBRATION_SHADING_RADIAL_G] = &calibration_shading_radial_g;
        c->calibrations[CALIBRATION_SHADING_RADIAL_B] = &calibration_shading_radial_b;
        c->calibrations[CALIBRATION_DECOMPANDER0_MEM] = &calibration_decompander0_mem;
        c->calibrations[CALIBRATION_DECOMPANDER1_MEM] = &calibration_decompander1_mem;
        c->calibrations[CALIBRATION_LIGHT_SRC] = &calibration_light_src;
        c->calibrations[CALIBRATION_RG_POS] = &calibration_rg_pos;
        c->calibrations[CALIBRATION_BG_POS] = &calibration_bg_pos;
        c->calibrations[CALIBRATION_MESH_RGBG_WEIGHT] = &calibration_mesh_rgbg_weight;
        c->calibrations[CALIBRATION_MESH_LS_WEIGHT] = &calibration_mesh_ls_weight;
        c->calibrations[CALIBRATION_MESH_COLOR_TEMPERATURE] = &calibration_mesh_color_temperature;
        c->calibrations[CALIBRATION_WB_STRENGTH] = &calibration_wb_strength;
        c->calibrations[CALIBRATION_SKY_LUX_TH] = &calibration_sky_lux_th;
        c->calibrations[CALIBRATION_CT_RG_POS_CALC] = &calibration_ct_rg_pos_calc;
        c->calibrations[CALIBRATION_CT_BG_POS_CALC] = &calibration_ct_bg_pos_calc;
        c->calibrations[CALIBRATION_COLOR_TEMP] = &calibration_color_temp;
        c->calibrations[CALIBRATION_CT65POS] = &calibration_ct65pos;
        c->calibrations[CALIBRATION_CT40POS] = &calibration_ct40pos;
        c->calibrations[CALIBRATION_CT30POS] = &calibration_ct30pos;
        c->calibrations[CALIBRATION_EVTOLUX_EV_LUT] = &calibration_evtolux_ev_lut;
        c->calibrations[CALIBRATION_EVTOLUX_LUX_LUT] = &calibration_evtolux_lux_lut;
        c->calibrations[CALIBRATION_BLACK_LEVEL_R] = &calibration_black_level_r;
        c->calibrations[CALIBRATION_BLACK_LEVEL_GR] = &calibration_black_level_gr;
        c->calibrations[CALIBRATION_BLACK_LEVEL_GB] = &calibration_black_level_gb;
        c->calibrations[CALIBRATION_BLACK_LEVEL_B] = &calibration_black_level_b;
        c->calibrations[CALIBRATION_STATIC_WB] = &calibration_static_wb;
        c->calibrations[CALIBRATION_MT_ABSOLUTE_LS_A_CCM] = &calibration_mt_absolute_ls_a_ccm;
        c->calibrations[CALIBRATION_MT_ABSOLUTE_LS_D40_CCM] = &calibration_mt_absolute_ls_d40_ccm;
        c->calibrations[CALIBRATION_MT_ABSOLUTE_LS_D50_CCM] = &calibration_mt_absolute_ls_d50_ccm;
        c->calibrations[CALIBRATION_SHADING_LS_A_R] = &calibration_shading_ls_a_r;
        c->calibrations[CALIBRATION_SHADING_LS_A_G] = &calibration_shading_ls_a_g;
        c->calibrations[CALIBRATION_SHADING_LS_A_B] = &calibration_shading_ls_a_b;
        c->calibrations[CALIBRATION_SHADING_LS_TL84_R] = &calibration_shading_ls_tl84_r;
        c->calibrations[CALIBRATION_SHADING_LS_TL84_G] = &calibration_shading_ls_tl84_g;
        c->calibrations[CALIBRATION_SHADING_LS_TL84_B] = &calibration_shading_ls_tl84_b;
        c->calibrations[CALIBRATION_SHADING_LS_D65_R] = &calibration_shading_ls_d65_r;
        c->calibrations[CALIBRATION_SHADING_LS_D65_G] = &calibration_shading_ls_d65_g;
        c->calibrations[CALIBRATION_SHADING_LS_D65_B] = &calibration_shading_ls_d65_b;
        c->calibrations[CALIBRATION_AWB_WARMING_LS_A] = &calibration_awb_warming_ls_a;
        c->calibrations[CALIBRATION_AWB_WARMING_LS_D50] = &calibration_awb_warming_ls_d50;
        c->calibrations[CALIBRATION_AWB_WARMING_LS_D75] = &calibration_awb_warming_ls_d75;
        c->calibrations[CALIBRATION_NOISE_PROFILE] = &calibration_noise_profile;
        c->calibrations[CALIBRATION_DEMOSAIC] = &calibration_demosaic;
        c->calibrations[CALIBRATION_WDR_NP_LUT] = &calibration_wdr_np_lut;
        c->calibrations[CALIBRATION_GAMMA] = &calibration_gamma;
        c->calibrations[CALIBRATION_IRIDIX_ASYMMETRY] = &calibration_iridix_asymmetry;
        c->calibrations[CALIBRATION_AWB_SCENE_PRESETS] = &calibration_awb_scene_presets;
        c->calibrations[CALIBRATION_CA_FILTER_MEM] = &calibration_ca_filter_mem;
        c->calibrations[CALIBRATION_CA_CORRECTION] = &calibration_ca_correction;
        c->calibrations[CALIBRATION_CA_CORRECTION_MEM] = &calibration_ca_correction_mem;
        c->calibrations[CALIBRATION_LUT3D_MEM] = &calibration_lut3d_mem;
    } else {
        result = -1;
    }
    return result;
}
